diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index ba0da084f..50b86a75d 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -31,29 +31,6 @@ type tStoreSkuBindAndVendorSkuID struct { func init() { } -func (c *OrderManager) LoadPendingOrders() []*model.GoodsOrder { - db := orm.NewOrm() - var orders []*model.GoodsOrder - tillTime := time.Now().Add(-pendingOrderGapMax) - _, err := db.Raw(` - SELECT * - FROM goods_order - WHERE order_created_at >= ? - AND status < ? - `, tillTime, model.OrderStatusEndBegin).QueryRows(&orders) - if err != nil { - globals.SugarLogger.Warnf("LoadPendingOrders load pending orders error:%v", err) - return nil - } - for _, order := range orders { - utils.CallFuncLogError(func() error { - _, err = db.QueryTable("order_sku").Filter("vendor_order_id", order.VendorOrderID).Filter("vendor_id", order.VendorID).All(&order.Skus) - return err - }, "LoadPendingOrders order:%v", order) - } - return orders -} - // msgVendorStatus的意思是事件本身的类型,类似有时收到NewOrder事件去取,订单状态不一定就是New的 // OnOrderAdjust也类似,而OrderStatus要记录的是消息,所以添加这个 func (c *OrderManager) OnOrderNew(order *model.GoodsOrder, orderStatus *model.OrderStatus) (err error) { diff --git a/business/jxcallback/orderman/orderman.go b/business/jxcallback/orderman/orderman.go index c907ed479..f66f1528a 100644 --- a/business/jxcallback/orderman/orderman.go +++ b/business/jxcallback/orderman/orderman.go @@ -115,8 +115,11 @@ func (c *OrderManager) GetStatusDuplicatedCount(status *model.OrderStatus) (dupl // todo 最好还是改成全事件回放算了 func LoadPendingOrders() { - orders := FixedOrderManager.LoadPendingOrders() - globals.SugarLogger.Infof("LoadPendingOrders orders count:%d", len(orders)) + orders, err := dao.LoadPendingOrders(dao.GetDB(), time.Now().Add(-pendingOrderGapMax), model.OrderStatusEndBegin) + globals.SugarLogger.Infof("LoadPendingOrders orders count:%d, err:%v", len(orders), err) + if err != nil { + return + } ordersCount := len(orders) if ordersCount > 0 { diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index d70cbefb2..32875944e 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -762,7 +762,7 @@ func SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITask, actID int, vendor if vendorIDs == nil { vendorIDs = partner.GetVendorIDsFromActMap(actMap) } - if len(vendorIDs) == 0 || actMap[vendorIDs[0]].Type == model.ActSkuFake { + if len(vendorIDs) == 0 || vendorIDs[0] == model.VendorIDJX || actMap[vendorIDs[0]].Type == model.ActSkuFake { return "", nil } task := tasksch.NewParallelTask("SyncAct", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index ebccfdc9c..df0b8c0c5 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -1015,3 +1015,15 @@ func GetPendingFakeOrders(db *DaoDB, vendorIDs []int, orderCreatedAfter, orderCr err = GetRows(db, &orderList, sql, sqlParams...) return orderList, err } + +// 不会有Skus信息 +func LoadPendingOrders(db *DaoDB, orderCreatedAfter time.Time, beforStatus int) (orderList []*model.GoodsOrder, err error) { + sql := ` + SELECT * + FROM goods_order + WHERE order_created_at >= ? + AND status < ?` + sqlParams := []interface{}{orderCreatedAfter, beforStatus} + err = GetRows(db, &orderList, sql, sqlParams...) + return orderList, err +} diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index 640ec7d39..4064fbb26 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -159,6 +159,23 @@ func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64, return outJxOrder, err } +// 买家取消(或申请取消)订单 +func BuyerCancelOrder(ctx *jxcontext.Context, orderID int64) (canceled bool, err error) { + order, err := partner.CurOrderManager.LoadOrder(utils.Int64ToStr(orderID), model.VendorIDJX) + if err == nil { + if order.Status < model.OrderStatusNew { + order.Status = model.OrderStatusCanceled + order.VendorStatus = utils.Int2Str(model.OrderStatusCanceled) + if err = partner.CurOrderManager.UpdateOrderFields(order, []string{model.FieldStatus, "VendorStatus"}); err == nil { + canceled = true + } + } else { + err = changeOrderStatus(utils.Int64ToStr(orderID), model.OrderStatusApplyCancel, fmt.Sprintf("用户%s主动取消", ctx.GetUserName())) + } + } + return canceled, err +} + func Pay4Order(ctx *jxcontext.Context, orderID int64, payType int, vendorPayType string) (orderPay *model.OrderPay, err error) { order, err := partner.CurOrderManager.LoadOrder(utils.Int64ToStr(orderID), model.VendorIDJX) if err == nil { @@ -535,6 +552,15 @@ func CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) return err } +func AgreeOrRefuseCancel(ctx *jxcontext.Context, order *model.GoodsOrder, isAgree bool, reason string) (err error) { + if isAgree { + err = CancelOrder(ctx, order, reason) + } else { + err = changeOrderStatus(order.VendorOrderID, model.OrderStatusUndoApplyCancel, reason) + } + return err +} + // todo 消息用异步可能导致丢失,单同步又有重入相关的问题 func callNewOrder(order *model.GoodsOrder) (err error) { jxutils.CallMsgHandlerAsync(func() { diff --git a/business/partner/purchase/jx/order.go b/business/partner/purchase/jx/order.go index 5bd3086bc..efd086d3f 100644 --- a/business/partner/purchase/jx/order.go +++ b/business/partner/purchase/jx/order.go @@ -86,6 +86,10 @@ func (c *PurchaseHandler) GetOrderRealMobile(ctx *jxcontext.Context, order *mode } func (c *PurchaseHandler) AgreeOrRefuseCancel(ctx *jxcontext.Context, order *model.GoodsOrder, isAgree bool, reason string) (err error) { + if model.IsOrderJXTemp(order) { + } else { + err = localjx.AgreeOrRefuseCancel(ctx, order, isAgree, reason) + } return err }