新接口合并订单
This commit is contained in:
@@ -1321,6 +1321,139 @@ func setJdsOrderSeq(order *model.GoodsOrder) (err error) {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MergeJdsOrders(ctx *jxcontext.Context, vendorOrderIDs []string) (vendorOrderIDJds string, err error) {
|
||||||
|
globals.SugarLogger.Debugf("jds MergeJdsOrders vendorOrderIDs: %v", vendorOrderIDs)
|
||||||
|
var (
|
||||||
|
db = dao.GetDB()
|
||||||
|
orders []*model.GoodsOrder
|
||||||
|
orderSkus []*model.OrderSku
|
||||||
|
orderIDs []string
|
||||||
|
storeDuplicate = make(map[int]int)
|
||||||
|
storeID int
|
||||||
|
)
|
||||||
|
for _, vendorOrderID := range vendorOrderIDs {
|
||||||
|
order, _ := dao.GetSimpleOrder(db, vendorOrderID)
|
||||||
|
if err != nil || order == nil {
|
||||||
|
return "", fmt.Errorf("未查询到该订单!订单号:[%v]", vendorOrderID)
|
||||||
|
}
|
||||||
|
if order.Status >= model.OrderStatusDelivering && order.Status != model.OrderStatusCanceled {
|
||||||
|
return "", fmt.Errorf("暂不支持此状态的订单进行转移!订单号:[%v]", vendorOrderID)
|
||||||
|
}
|
||||||
|
if order.VendorID != model.VendorIDJDShop {
|
||||||
|
return "", fmt.Errorf("暂不支持非京狗的订单进行转移!订单号:[%v]", vendorOrderID)
|
||||||
|
}
|
||||||
|
storeDuplicate[jxutils.GetSaleStoreIDFromOrder(order)] = jxutils.GetSaleStoreIDFromOrder(order)
|
||||||
|
orders = append(orders, order)
|
||||||
|
|
||||||
|
//订单商品
|
||||||
|
skus, _ := dao.GetSimpleOrderSkus(db, order.VendorOrderID, nil)
|
||||||
|
orderSkus = append(orderSkus, skus...)
|
||||||
|
|
||||||
|
orderIDs = append(orderIDs, vendorOrderID)
|
||||||
|
}
|
||||||
|
if len(storeDuplicate) > 1 {
|
||||||
|
return "", fmt.Errorf("只能选择相同门店的订单进行合并!")
|
||||||
|
} else {
|
||||||
|
storeID = jxutils.GetSaleStoreIDFromOrder(orders[0])
|
||||||
|
}
|
||||||
|
for _, order := range orders {
|
||||||
|
var waybill *model.Waybill
|
||||||
|
//将订单和运单取消
|
||||||
|
waybills, err := dao.GetWaybills(db, order.VendorOrderID)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
if len(waybills) > 0 {
|
||||||
|
for _, v := range waybills {
|
||||||
|
if v.Status != model.WaybillStatusCanceled {
|
||||||
|
waybill = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if waybill != nil {
|
||||||
|
if waybill.WaybillVendorID != model.VendorIDJDWL {
|
||||||
|
if handler := partner.GetDeliveryPlatformFromVendorID(waybill.WaybillVendorID); handler != nil {
|
||||||
|
err = handler.Handler.CancelWaybill(waybill, 0, "订单合并被取消")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err = jdshop.ChangeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, "订单合并被取消"); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//重新构建order的数据
|
||||||
|
storeMaps, err := dao.GetStoresMapList(db, []int{model.VendorIDJDShop}, []int{storeID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "")
|
||||||
|
if err != nil || len(storeMaps) == 0 {
|
||||||
|
return "", fmt.Errorf("该门店未绑定京狗平台,请先绑定后再转移!门店:[%v]", storeID)
|
||||||
|
}
|
||||||
|
stores, _ := dao.GetStoreList(db, []int{storeID}, nil, nil, nil, "")
|
||||||
|
store := stores[0]
|
||||||
|
order := &model.GoodsOrder{
|
||||||
|
StoreID: storeID,
|
||||||
|
StoreName: store.Name,
|
||||||
|
VendorStoreID: storeMaps[0].VendorStoreID,
|
||||||
|
VendorOrderID: utils.Int64ToStr(utils.Str2Int64(orders[0].VendorOrderID2)*10000) + utils.Int2Str(99),
|
||||||
|
VendorOrderID2: strings.Join(orderIDs, ","),
|
||||||
|
Status: model.OrderStatusNew,
|
||||||
|
}
|
||||||
|
setJdsOrderSeq(order)
|
||||||
|
var (
|
||||||
|
opentime1 = jxutils.JxOperationTime2TimeByDate(store.OpenTime1, time.Now())
|
||||||
|
opentime2 = jxutils.JxOperationTime2TimeByDate(store.OpenTime2, time.Now())
|
||||||
|
closetime1 = jxutils.JxOperationTime2TimeByDate(store.CloseTime1, time.Now())
|
||||||
|
closetime2 = jxutils.JxOperationTime2TimeByDate(store.CloseTime2, time.Now())
|
||||||
|
orderCreatedAt = time.Now()
|
||||||
|
)
|
||||||
|
if store.OpenTime1 == 0 || store.CloseTime1 == 0 {
|
||||||
|
return "", fmt.Errorf("该门店没有营业时间,不能接单!门店:[%v]", storeID)
|
||||||
|
}
|
||||||
|
if !(orderCreatedAt.Sub(opentime1) >= 0 && orderCreatedAt.Sub(closetime1) <= 0) {
|
||||||
|
if store.OpenTime2 != 0 && store.CloseTime2 != 0 {
|
||||||
|
if !(orderCreatedAt.Sub(opentime2) >= 0 && orderCreatedAt.Sub(closetime2) <= 0) {
|
||||||
|
if orderCreatedAt.Sub(opentime1) < 0 {
|
||||||
|
order.ExpectedDeliveredTime = opentime1
|
||||||
|
order.BusinessType = model.BusinessTypeDingshida
|
||||||
|
} else {
|
||||||
|
if orderCreatedAt.Sub(opentime2) < 0 {
|
||||||
|
order.ExpectedDeliveredTime = opentime2
|
||||||
|
} else {
|
||||||
|
order.ExpectedDeliveredTime = opentime1.AddDate(0, 0, 1)
|
||||||
|
}
|
||||||
|
order.BusinessType = model.BusinessTypeDingshida
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if orderCreatedAt.Sub(opentime1) < 0 {
|
||||||
|
order.ExpectedDeliveredTime = opentime1
|
||||||
|
} else {
|
||||||
|
order.ExpectedDeliveredTime = opentime1.AddDate(0, 0, 1)
|
||||||
|
}
|
||||||
|
order.BusinessType = model.BusinessTypeDingshida
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
order.BusinessType = model.BusinessTypeImmediate
|
||||||
|
order.ExpectedDeliveredTime = time.Now().Add(time.Hour)
|
||||||
|
}
|
||||||
|
//结算类型
|
||||||
|
if store.PayPercentage < 50 {
|
||||||
|
order.EarningType = model.EarningTypePoints
|
||||||
|
} else {
|
||||||
|
order.EarningType = model.EarningTypeQuote
|
||||||
|
}
|
||||||
|
if storeID != model.JdShopMainStoreID {
|
||||||
|
order.DeliveryFlag = model.NO
|
||||||
|
}
|
||||||
|
//skus
|
||||||
|
for _, sku := range orderSkus {
|
||||||
|
sku.VendorOrderID = order.VendorOrderID
|
||||||
|
sku.ID = 0
|
||||||
|
}
|
||||||
|
order.Skus = orderSkus
|
||||||
|
err = partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order))
|
||||||
|
vendorOrderIDJds = order.VendorOrderID
|
||||||
|
return vendorOrderIDJds, err
|
||||||
|
}
|
||||||
|
|
||||||
func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int) (vendorOrderIDJds string, err error) {
|
func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int) (vendorOrderIDJds string, err error) {
|
||||||
globals.SugarLogger.Debugf("jds TransferJdsOrder vendorOrderID: %v, storeID : %v", vendorOrderID, storeID)
|
globals.SugarLogger.Debugf("jds TransferJdsOrder vendorOrderID: %v, storeID : %v", vendorOrderID, storeID)
|
||||||
var (
|
var (
|
||||||
@@ -1354,10 +1487,8 @@ func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int)
|
|||||||
}
|
}
|
||||||
if waybill != nil {
|
if waybill != nil {
|
||||||
if waybill.WaybillVendorID != model.VendorIDJDWL {
|
if waybill.WaybillVendorID != model.VendorIDJDWL {
|
||||||
handler := partner.DeliveryPlatformHandlers[waybill.WaybillVendorID]
|
if handler := partner.GetDeliveryPlatformFromVendorID(waybill.WaybillVendorID); handler != nil {
|
||||||
err = handler.Handler.CancelWaybill(waybill, 0, "订单转移被取消")
|
err = handler.Handler.CancelWaybill(waybill, 0, "订单转移被取消")
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ type JxOrderInfo struct {
|
|||||||
IsBuyNowPrice int `json:"isBuyNowPrice"`
|
IsBuyNowPrice int `json:"isBuyNowPrice"`
|
||||||
IsPriceDefend int `json:"isPriceDefend"`
|
IsPriceDefend int `json:"isPriceDefend"`
|
||||||
OrderID2 string `json:"-"`
|
OrderID2 string `json:"-"`
|
||||||
|
UserID string `json:"userID"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type DeliveryTimeItem struct {
|
type DeliveryTimeItem struct {
|
||||||
@@ -878,6 +879,9 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
|||||||
if jxOrder.OrderType == model.OrderTypeDefendPrice {
|
if jxOrder.OrderType == model.OrderTypeDefendPrice {
|
||||||
outJxOrder.Skus[0].DefendPrice = jxOrder.Skus[0].DefendPrice
|
outJxOrder.Skus[0].DefendPrice = jxOrder.Skus[0].DefendPrice
|
||||||
}
|
}
|
||||||
|
if jxOrder.UserID != "" {
|
||||||
|
outJxOrder.UserID = jxOrder.UserID
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
outJxOrder = nil
|
outJxOrder = nil
|
||||||
deliveryAddress = nil
|
deliveryAddress = nil
|
||||||
@@ -954,6 +958,12 @@ func jxOrder2GoodsOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, deliveryAd
|
|||||||
}
|
}
|
||||||
order.OrderCreatedAt = order.StatusTime
|
order.OrderCreatedAt = order.StatusTime
|
||||||
order.VendorUserID = order.UserID
|
order.VendorUserID = order.UserID
|
||||||
|
if order.UserID == "" && order.VendorUserID == "" {
|
||||||
|
if jxOrder.UserID != "" {
|
||||||
|
order.UserID = jxOrder.UserID
|
||||||
|
order.VendorUserID = jxOrder.UserID
|
||||||
|
}
|
||||||
|
}
|
||||||
if jxOrder.ExpectedDeliveredTimestamp != 0 {
|
if jxOrder.ExpectedDeliveredTimestamp != 0 {
|
||||||
order.ExpectedDeliveredTime = utils.Timestamp2Time(jxOrder.ExpectedDeliveredTimestamp)
|
order.ExpectedDeliveredTime = utils.Timestamp2Time(jxOrder.ExpectedDeliveredTimestamp)
|
||||||
order.BusinessType = model.BusinessTypeDingshida
|
order.BusinessType = model.BusinessTypeDingshida
|
||||||
@@ -1963,6 +1973,8 @@ func CreateOrderByPriceDefend(ctx *jxcontext.Context) (err error) {
|
|||||||
userOrderMap[v.AddressID] = append(userOrderMap[v.AddressID], v)
|
userOrderMap[v.AddressID] = append(userOrderMap[v.AddressID], v)
|
||||||
}
|
}
|
||||||
for kk, vv := range userOrderMap {
|
for kk, vv := range userOrderMap {
|
||||||
|
addressList, _, _ := dao.QueryUserDeliveryAddress(db, kk, nil, 0, 0)
|
||||||
|
address := addressList[0]
|
||||||
if len(vv) == 1 {
|
if len(vv) == 1 {
|
||||||
jxOrder := &JxOrderInfo{
|
jxOrder := &JxOrderInfo{
|
||||||
BuyerComment: "守价订单",
|
BuyerComment: "守价订单",
|
||||||
@@ -1975,6 +1987,7 @@ func CreateOrderByPriceDefend(ctx *jxcontext.Context) (err error) {
|
|||||||
},
|
},
|
||||||
IsPriceDefend: model.YES,
|
IsPriceDefend: model.YES,
|
||||||
OrderID: utils.Str2Int64(vv[0].VendorOrderID),
|
OrderID: utils.Str2Int64(vv[0].VendorOrderID),
|
||||||
|
UserID: address.UserID,
|
||||||
}
|
}
|
||||||
if _, err := CreateOrder(ctx, jxOrder, kk, OrderCreateTypeNormal, 0, false); err == nil {
|
if _, err := CreateOrder(ctx, jxOrder, kk, OrderCreateTypeNormal, 0, false); err == nil {
|
||||||
err = SettleDiscountActByPriceDefend(ctx, vv[0], false)
|
err = SettleDiscountActByPriceDefend(ctx, vv[0], false)
|
||||||
@@ -1989,6 +2002,7 @@ func CreateOrderByPriceDefend(ctx *jxcontext.Context) (err error) {
|
|||||||
StoreID: vv[0].StoreID,
|
StoreID: vv[0].StoreID,
|
||||||
IsPriceDefend: model.YES,
|
IsPriceDefend: model.YES,
|
||||||
OrderID: GenOrderNo(ctx),
|
OrderID: GenOrderNo(ctx),
|
||||||
|
UserID: address.UserID,
|
||||||
}
|
}
|
||||||
for _, priceDefend := range vv {
|
for _, priceDefend := range vv {
|
||||||
sku := &JxSkuInfo{
|
sku := &JxSkuInfo{
|
||||||
|
|||||||
@@ -1077,6 +1077,20 @@ func (c *OrderController) TransferJdsOrder() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Title 合并订单(京东商城用)
|
||||||
|
// @Description 合并订单(京东商城用)
|
||||||
|
// @Param token header string true "认证token"
|
||||||
|
// @Param vendorOrderIDs formData string true "订单号s"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /MergeJdsOrders [post]
|
||||||
|
func (c *OrderController) MergeJdsOrders() {
|
||||||
|
c.callMergeJdsOrders(func(params *tOrderMergeJdsOrdersParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// @Title 京东商城订单发送京东物流
|
// @Title 京东商城订单发送京东物流
|
||||||
// @Description 京东商城订单发送京东物流
|
// @Description 京东商城订单发送京东物流
|
||||||
// @Param token header string true "认证token"
|
// @Param token header string true "认证token"
|
||||||
|
|||||||
@@ -1224,6 +1224,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||||
|
beego.ControllerComments{
|
||||||
|
Method: "MergeJdsOrders",
|
||||||
|
Router: `/MergeJdsOrders`,
|
||||||
|
AllowHTTPMethods: []string{"post"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "PartRefundOrder",
|
Method: "PartRefundOrder",
|
||||||
|
|||||||
Reference in New Issue
Block a user