新接口合并订单

This commit is contained in:
苏尹岚
2020-08-31 11:40:55 +08:00
parent 7f90df02ab
commit 6750c35ebd
4 changed files with 172 additions and 4 deletions

View File

@@ -1321,6 +1321,139 @@ func setJdsOrderSeq(order *model.GoodsOrder) (err error) {
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) {
globals.SugarLogger.Debugf("jds TransferJdsOrder vendorOrderID: %v, storeID : %v", vendorOrderID, storeID)
var (
@@ -1354,10 +1487,8 @@ func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int)
}
if waybill != nil {
if waybill.WaybillVendorID != model.VendorIDJDWL {
handler := partner.DeliveryPlatformHandlers[waybill.WaybillVendorID]
err = handler.Handler.CancelWaybill(waybill, 0, "订单转移被取消")
if err != nil {
return "", err
if handler := partner.GetDeliveryPlatformFromVendorID(waybill.WaybillVendorID); handler != nil {
err = handler.Handler.CancelWaybill(waybill, 0, "订单转移被取消")
}
}
}