添加淘鲜达
This commit is contained in:
@@ -27,7 +27,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (c *BaseScheduler) CreateWaybillOnProviders(ctx *jxcontext.Context, order *model.GoodsOrder, courierVendorIDs, excludeCourierVendorIDs []int, maxDeliveryFee int64, createOnlyOne bool) (bills []*model.Waybill, err error) {
|
func (c *BaseScheduler) CreateWaybillOnProviders(ctx *jxcontext.Context, order *model.GoodsOrder, courierVendorIDs, excludeCourierVendorIDs []int, maxDeliveryFee int64, createOnlyOne bool) (bills []*model.Waybill, err error) {
|
||||||
storeCourierList, err := dao.GetStoreCourierList2(dao.GetDB(), []int{jxutils.GetSaleStoreIDFromOrder(order)}, nil, model.StoreStatusOpened, []int{model.StoreAuditStatusOnline, model.StoreAuditStatusUpdated})
|
storeCourierList, err := dao.GetStoreCourierList2(dao.GetDB(), []int{jxutils.GetSaleStoreIDFromOrder(order)}, courierVendorIDs, model.StoreStatusOpened, []int{model.StoreAuditStatusOnline, model.StoreAuditStatusUpdated})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -944,6 +944,7 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
|
|||||||
|
|
||||||
//1表示为门店发单,需要验证门店账户余额情况
|
//1表示为门店发单,需要验证门店账户余额情况
|
||||||
_, err2 := s.CheckStoreBalance(jxcontext.AdminCtx, order, waybillVendorIDs)
|
_, err2 := s.CheckStoreBalance(jxcontext.AdminCtx, order, waybillVendorIDs)
|
||||||
|
// 检查是否有有效运单
|
||||||
if err == nil && err2 == nil {
|
if err == nil && err2 == nil {
|
||||||
// 1.检查门店三方配送配置,达达>蜂鸟>美团>顺丰>uu
|
// 1.检查门店三方配送配置,达达>蜂鸟>美团>顺丰>uu
|
||||||
// excludeVendorIDs 包括上面已经发送的平台id
|
// excludeVendorIDs 包括上面已经发送的平台id
|
||||||
|
|||||||
@@ -42,8 +42,8 @@ func (s *DefScheduler) SelfDeliveringAndUpdateStatus(ctx *jxcontext.Context, ven
|
|||||||
if err = err2; err == nil {
|
if err = err2; err == nil {
|
||||||
phone = storeDetail.Tel1
|
phone = storeDetail.Tel1
|
||||||
}
|
}
|
||||||
err = s.SelfDeliverDelivering(order, phone) // 取消平台自配送
|
err = s.SelfDeliverDelivering(order, phone) // 取消平台自配送
|
||||||
//s.CancelAll3rdWaybills(ctx, vendorOrderID, vendorID, true) // 取消三方平台配送以及调度
|
s.CancelAll3rdWaybills(ctx, vendorOrderID, vendorID, true) // 取消三方平台配送以及调度
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if order.Status < model.OrderStatusDelivering {
|
if order.Status < model.OrderStatusDelivering {
|
||||||
@@ -159,6 +159,14 @@ func (s *DefScheduler) CreateWaybillOnProviders4SavedOrder(ctx *jxcontext.Contex
|
|||||||
if !forceCreate {
|
if !forceCreate {
|
||||||
err = s.canOrderCreateWaybillNormally(order, nil)
|
err = s.canOrderCreateWaybillNormally(order, nil)
|
||||||
}
|
}
|
||||||
|
// 检查订单是否在配送状态
|
||||||
|
waybills, err := dao.GetWaybills(dao.GetDB(), order.VendorOrderID, nil)
|
||||||
|
for _, v := range waybills {
|
||||||
|
if v.Status >= model.OrderStatusDelivering {
|
||||||
|
err = fmt.Errorf("订单已经在配送中,无法创建运单,有疑问请联系管理员")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
if err == nil {
|
if err == nil {
|
||||||
if forceCreate {
|
if forceCreate {
|
||||||
maxDeliveryFee = math.MaxInt64
|
maxDeliveryFee = math.MaxInt64
|
||||||
|
|||||||
@@ -177,6 +177,8 @@ func getVendorPriceFromStoreSkuBind(bind *model.StoreSkuBind, vendorID int) (ven
|
|||||||
vendorPrice = bind.JxPrice
|
vendorPrice = bind.JxPrice
|
||||||
case model.VendorIDDD:
|
case model.VendorIDDD:
|
||||||
vendorPrice = bind.DdPrice
|
vendorPrice = bind.DdPrice
|
||||||
|
case model.VendorIDTaoVegetable:
|
||||||
|
vendorPrice = bind.TaoPrice
|
||||||
}
|
}
|
||||||
return vendorPrice
|
return vendorPrice
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -451,6 +451,7 @@ func DeleteCategoryMap(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int) (n
|
|||||||
return dao.DeleteEntityLogically(db, catMap, map[string]interface{}{
|
return dao.DeleteEntityLogically(db, catMap, map[string]interface{}{
|
||||||
model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask,
|
model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask,
|
||||||
model.FieldMtwmSyncStatus: model.SyncFlagDeletedMask,
|
model.FieldMtwmSyncStatus: model.SyncFlagDeletedMask,
|
||||||
|
model.FieldTaoSyncStatus: model.SyncFlagDeletedMask,
|
||||||
}, ctx.GetUserName(), map[string]interface{}{
|
}, ctx.GetUserName(), map[string]interface{}{
|
||||||
model.FieldCategoryID: categoryID,
|
model.FieldCategoryID: categoryID,
|
||||||
model.FieldDeletedAt: utils.DefaultTimeValue,
|
model.FieldDeletedAt: utils.DefaultTimeValue,
|
||||||
@@ -1188,10 +1189,10 @@ func getCategoryByImg(img ...string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 根据平台返回的分类id,获取本地绑定的映射分类id
|
// 根据平台返回的分类id,获取本地绑定的映射分类id
|
||||||
func getJDCategoryLoadingLocalCategoryReflex(jdCategoryId, jdsCategoryID, ebaiCategoryID, mtwmCategoryID string, jxCategoryId int) (string, string, string, int) {
|
func getJDCategoryLoadingLocalCategoryReflex(jdCategoryId, jdsCategoryID, ebaiCategoryID, mtwmCategoryID, taoCategoryID string, jxCategoryId int) (string, string, string, string, int) {
|
||||||
cats, err := dao.GetCategoriesByName(dao.GetDB(), "", jdCategoryId)
|
cats, err := dao.GetCategoriesByName(dao.GetDB(), "", jdCategoryId)
|
||||||
if len(cats) == 0 || err != nil {
|
if len(cats) == 0 || err != nil {
|
||||||
return jdsCategoryID, ebaiCategoryID, mtwmCategoryID, 0
|
return jdsCategoryID, ebaiCategoryID, mtwmCategoryID, taoCategoryID, 0
|
||||||
} else {
|
} else {
|
||||||
if jdsCategoryID == "" && cats[0].JdsCategoryID != 0 {
|
if jdsCategoryID == "" && cats[0].JdsCategoryID != 0 {
|
||||||
jdsCategoryID = utils.Int64ToStr(cats[0].JdsCategoryID)
|
jdsCategoryID = utils.Int64ToStr(cats[0].JdsCategoryID)
|
||||||
@@ -1202,11 +1203,14 @@ func getJDCategoryLoadingLocalCategoryReflex(jdCategoryId, jdsCategoryID, ebaiCa
|
|||||||
if mtwmCategoryID == "" && cats[0].MtwmCategoryID != 0 {
|
if mtwmCategoryID == "" && cats[0].MtwmCategoryID != 0 {
|
||||||
mtwmCategoryID = utils.Int64ToStr(cats[0].MtwmCategoryID)
|
mtwmCategoryID = utils.Int64ToStr(cats[0].MtwmCategoryID)
|
||||||
}
|
}
|
||||||
|
if taoCategoryID == "" && cats[0].TaoCategoryID != 0 {
|
||||||
|
taoCategoryID = utils.Int64ToStr(cats[0].TaoCategoryID)
|
||||||
|
}
|
||||||
if jxCategoryId == 0 || jxCategoryId == 291 {
|
if jxCategoryId == 0 || jxCategoryId == 291 {
|
||||||
jxCategoryId = cats[0].ID
|
jxCategoryId = cats[0].ID
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return jdsCategoryID, ebaiCategoryID, mtwmCategoryID, jxCategoryId
|
return jdsCategoryID, ebaiCategoryID, mtwmCategoryID, taoCategoryID, jxCategoryId
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateOrCreateSkuVendorCategoryMap(db *dao.DaoDB, ctx *jxcontext.Context, nameID int, payload map[string]interface{}, skuNameExt *model.SkuNameExt, isDelete bool) (flag bool) {
|
func updateOrCreateSkuVendorCategoryMap(db *dao.DaoDB, ctx *jxcontext.Context, nameID int, payload map[string]interface{}, skuNameExt *model.SkuNameExt, isDelete bool) (flag bool) {
|
||||||
@@ -1242,6 +1246,7 @@ func updateOrCreateSkuVendorCategoryMap(db *dao.DaoDB, ctx *jxcontext.Context, n
|
|||||||
jdsCategoryID := ""
|
jdsCategoryID := ""
|
||||||
ebaiCategoryID := ""
|
ebaiCategoryID := ""
|
||||||
mtwmCategoryID := ""
|
mtwmCategoryID := ""
|
||||||
|
taoCategoryID := ""
|
||||||
ddCategoryID := ""
|
ddCategoryID := ""
|
||||||
jxCategoryID := 0
|
jxCategoryID := 0
|
||||||
if skuNameExt != nil {
|
if skuNameExt != nil {
|
||||||
@@ -1252,7 +1257,7 @@ func updateOrCreateSkuVendorCategoryMap(db *dao.DaoDB, ctx *jxcontext.Context, n
|
|||||||
}
|
}
|
||||||
|
|
||||||
if jdCategoryId != "" && jdCategoryId != "0" {
|
if jdCategoryId != "" && jdCategoryId != "0" {
|
||||||
jdsCategoryID, ebaiCategoryID, mtwmCategoryID, jxCategoryID = getJDCategoryLoadingLocalCategoryReflex(jdCategoryId, skuNameExt.JdsCategoryID, skuNameExt.EbaiCategoryID, skuNameExt.MtwmCategoryID, skuNameExt.CategoryID)
|
jdsCategoryID, ebaiCategoryID, mtwmCategoryID, taoCategoryID, jxCategoryID = getJDCategoryLoadingLocalCategoryReflex(jdCategoryId, skuNameExt.JdsCategoryID, skuNameExt.EbaiCategoryID, skuNameExt.MtwmCategoryID, skuNameExt.TaoCategoryID, skuNameExt.CategoryID)
|
||||||
} else {
|
} else {
|
||||||
jdsCategoryID = skuNameExt.JdsCategoryID
|
jdsCategoryID = skuNameExt.JdsCategoryID
|
||||||
ebaiCategoryID = skuNameExt.EbaiCategoryID
|
ebaiCategoryID = skuNameExt.EbaiCategoryID
|
||||||
@@ -1323,7 +1328,7 @@ func updateOrCreateSkuVendorCategoryMap(db *dao.DaoDB, ctx *jxcontext.Context, n
|
|||||||
}
|
}
|
||||||
|
|
||||||
if jdCategoryId != "" {
|
if jdCategoryId != "" {
|
||||||
jdsCategoryID, ebaiCategoryID, mtwmCategoryID, jxCategoryID = getJDCategoryLoadingLocalCategoryReflex(jdCategoryId, jdsCategoryID, ebaiCategoryID, mtwmCategoryID, jxCategoryID)
|
jdsCategoryID, ebaiCategoryID, mtwmCategoryID, taoCategoryID, jxCategoryID = getJDCategoryLoadingLocalCategoryReflex(jdCategoryId, jdsCategoryID, ebaiCategoryID, mtwmCategoryID, taoCategoryID, jxCategoryID)
|
||||||
}
|
}
|
||||||
|
|
||||||
if payload["ddCategoryID"] != nil {
|
if payload["ddCategoryID"] != nil {
|
||||||
@@ -1645,6 +1650,7 @@ func refreshStoreSkuPrice(ctx *jxcontext.Context, db *dao.DaoDB, skuID int) (err
|
|||||||
storeSku.ID = v.BindID
|
storeSku.ID = v.BindID
|
||||||
storeSku.JdSyncStatus = v.JdSyncStatus | model.SyncFlagPriceMask
|
storeSku.JdSyncStatus = v.JdSyncStatus | model.SyncFlagPriceMask
|
||||||
storeSku.MtwmSyncStatus = v.MtwmSyncStatus | model.SyncFlagPriceMask
|
storeSku.MtwmSyncStatus = v.MtwmSyncStatus | model.SyncFlagPriceMask
|
||||||
|
storeSku.TaoSyncStatus = v.TaoSyncStatus | model.SyncFlagPriceMask
|
||||||
storeSku.EbaiSyncStatus = v.EbaiSyncStatus | model.SyncFlagPriceMask
|
storeSku.EbaiSyncStatus = v.EbaiSyncStatus | model.SyncFlagPriceMask
|
||||||
storeSku.Price = jxutils.CaculateSkuPrice(int(v.UnitPrice), v.SpecQuality, v.SpecUnit, v.Unit)
|
storeSku.Price = jxutils.CaculateSkuPrice(int(v.UnitPrice), v.SpecQuality, v.SpecUnit, v.Unit)
|
||||||
storeSku.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), int(storeSku.Price))
|
storeSku.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), int(storeSku.Price))
|
||||||
@@ -1659,7 +1665,7 @@ func refreshStoreSkuPrice(ctx *jxcontext.Context, db *dao.DaoDB, skuID int) (err
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
dao.UpdateEntity(db, storeSku, "Price", "JdSyncStatus", "MtwmSyncStatus", "EbaiSyncStatus", "JxPrice", "LastOperator")
|
dao.UpdateEntity(db, storeSku, "Price", "JdSyncStatus", "MtwmSyncStatus", "TaoSyncStatus", "EbaiSyncStatus", "JxPrice", "LastOperator")
|
||||||
dao.Commit(db, txDB)
|
dao.Commit(db, txDB)
|
||||||
return retVal, err
|
return retVal, err
|
||||||
}, list)
|
}, list)
|
||||||
@@ -1730,6 +1736,7 @@ func DeleteStoreSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuID int) (n
|
|||||||
_, err = dao.DeleteEntityLogically(db, storeSkuBind, map[string]interface{}{
|
_, err = dao.DeleteEntityLogically(db, storeSkuBind, map[string]interface{}{
|
||||||
model.FieldJdSyncStatus: model.SyncFlagDeletedMask,
|
model.FieldJdSyncStatus: model.SyncFlagDeletedMask,
|
||||||
model.FieldMtwmSyncStatus: model.SyncFlagDeletedMask,
|
model.FieldMtwmSyncStatus: model.SyncFlagDeletedMask,
|
||||||
|
model.FieldTaoSyncStatus: model.SyncFlagDeletedMask,
|
||||||
model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask,
|
model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask,
|
||||||
model.FieldJdsSyncStatus: model.SyncFlagDeletedMask,
|
model.FieldJdsSyncStatus: model.SyncFlagDeletedMask,
|
||||||
}, ctx.GetUserName(), map[string]interface{}{
|
}, ctx.GetUserName(), map[string]interface{}{
|
||||||
|
|||||||
@@ -719,7 +719,7 @@ func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, upcs []strin
|
|||||||
sql += " AND t4.status >= ? AND t4.status <= ?"
|
sql += " AND t4.status >= ? AND t4.status <= ?"
|
||||||
sqlParams = append(sqlParams, fromStatus, toStatus)
|
sqlParams = append(sqlParams, fromStatus, toStatus)
|
||||||
}
|
}
|
||||||
if params["jdSyncStatus"] != nil || params["ebaiSyncStatus"] != nil || params["mtwmSyncStatus"] != nil {
|
if params["jdSyncStatus"] != nil || params["ebaiSyncStatus"] != nil || params["mtwmSyncStatus"] != nil || params["taoSyncStatus"] != nil {
|
||||||
realVendorMap, err2 := getValidStoreVendorMap(db, storeIDs)
|
realVendorMap, err2 := getValidStoreVendorMap(db, storeIDs)
|
||||||
if err = err2; err != nil {
|
if err = err2; err != nil {
|
||||||
return "", nil, err
|
return "", nil, err
|
||||||
@@ -741,6 +741,10 @@ func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, upcs []strin
|
|||||||
sql += " OR (t4.mtwm_sync_status & ? <> 0 AND NOT (t4.mtwm_sync_status & ? <> 0 AND (t4.status <> ? OR t2.status <> ?)) )"
|
sql += " OR (t4.mtwm_sync_status & ? <> 0 AND NOT (t4.mtwm_sync_status & ? <> 0 AND (t4.status <> ? OR t2.status <> ?)) )"
|
||||||
sqlParams = append(sqlParams, params["mtwmSyncStatus"], model.SyncFlagNewMask, model.SkuStatusNormal, model.SkuStatusNormal)
|
sqlParams = append(sqlParams, params["mtwmSyncStatus"], model.SyncFlagNewMask, model.SkuStatusNormal, model.SkuStatusNormal)
|
||||||
}
|
}
|
||||||
|
if params["taoSyncStatus"] != nil && realVendorMap[model.VendorIDTaoVegetable] == 1 {
|
||||||
|
sql += " OR (t4.tao_sync_status & ? <> 0 AND NOT (t4.tao_sync_status & ? <> 0 AND (t4.status <> ? OR t2.status <> ?)) )"
|
||||||
|
sqlParams = append(sqlParams, params["taoSyncStatus"], model.SyncFlagNewMask, model.SkuStatusNormal, model.SkuStatusNormal)
|
||||||
|
}
|
||||||
sql += ")"
|
sql += ")"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -981,7 +985,7 @@ func getGetStoresSkusBaseSQL2(db *dao.DaoDB, storeIDs, skuIDs []int, upcs []stri
|
|||||||
sql += " AND t4.status >= ? AND t4.status <= ?"
|
sql += " AND t4.status >= ? AND t4.status <= ?"
|
||||||
sqlParams = append(sqlParams, fromStatus, toStatus)
|
sqlParams = append(sqlParams, fromStatus, toStatus)
|
||||||
}
|
}
|
||||||
if params["jdSyncStatus"] != nil || params["ebaiSyncStatus"] != nil || params["mtwmSyncStatus"] != nil {
|
if params["jdSyncStatus"] != nil || params["ebaiSyncStatus"] != nil || params["mtwmSyncStatus"] != nil || params["taoSyncStatus"] != nil {
|
||||||
realVendorMap, err2 := getValidStoreVendorMap(db, storeIDs)
|
realVendorMap, err2 := getValidStoreVendorMap(db, storeIDs)
|
||||||
if err = err2; err != nil {
|
if err = err2; err != nil {
|
||||||
return "", nil, err
|
return "", nil, err
|
||||||
@@ -1003,6 +1007,10 @@ func getGetStoresSkusBaseSQL2(db *dao.DaoDB, storeIDs, skuIDs []int, upcs []stri
|
|||||||
sql += " OR (t4.dd_sync_status & ? <> 0 AND NOT (t4.dd_sync_status & ? <> 0 AND (t4.status <> ? OR t2.status <> ?)) )"
|
sql += " OR (t4.dd_sync_status & ? <> 0 AND NOT (t4.dd_sync_status & ? <> 0 AND (t4.status <> ? OR t2.status <> ?)) )"
|
||||||
sqlParams = append(sqlParams, params["ddSyncStatus"], model.SyncFlagNewMask, model.SkuStatusNormal, model.SkuStatusNormal)
|
sqlParams = append(sqlParams, params["ddSyncStatus"], model.SyncFlagNewMask, model.SkuStatusNormal, model.SkuStatusNormal)
|
||||||
}
|
}
|
||||||
|
if params["taoSyncStatus"] != nil && realVendorMap[model.VendorIDTaoVegetable] == 1 {
|
||||||
|
sql += " OR (t4.tao_sync_status & ? <> 0 AND NOT (t4.tao_sync_status & ? <> 0 AND (t4.status <> ? OR t2.status <> ?)) )"
|
||||||
|
sqlParams = append(sqlParams, params["taoSyncStatus"], model.SyncFlagNewMask, model.SkuStatusNormal, model.SkuStatusNormal)
|
||||||
|
}
|
||||||
sql += ")"
|
sql += ")"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2066,6 +2074,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
skuBind.ID = deletedSku.ID
|
skuBind.ID = deletedSku.ID
|
||||||
// vendorSkuID的赋值意义不大
|
// vendorSkuID的赋值意义不大
|
||||||
skuBind.MtwmID = deletedSku.MtwmID
|
skuBind.MtwmID = deletedSku.MtwmID
|
||||||
|
skuBind.TaoID = deletedSku.TaoID
|
||||||
skuBind.EbaiID = deletedSku.EbaiID
|
skuBind.EbaiID = deletedSku.EbaiID
|
||||||
skuBind.JdsID = deletedSku.JdsID
|
skuBind.JdsID = deletedSku.JdsID
|
||||||
skuBind.JdsWareID = deletedSku.JdsWareID
|
skuBind.JdsWareID = deletedSku.JdsWareID
|
||||||
@@ -2125,6 +2134,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
model.FieldJdSyncStatus: model.SyncFlagDeletedMask,
|
model.FieldJdSyncStatus: model.SyncFlagDeletedMask,
|
||||||
model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask,
|
model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask,
|
||||||
model.FieldMtwmSyncStatus: model.SyncFlagDeletedMask,
|
model.FieldMtwmSyncStatus: model.SyncFlagDeletedMask,
|
||||||
|
model.FieldTaoSyncStatus: model.SyncFlagDeletedMask,
|
||||||
model.FieldYbSyncStatus: model.SyncFlagDeletedMask,
|
model.FieldYbSyncStatus: model.SyncFlagDeletedMask,
|
||||||
model.FieldJdsSyncStatus: model.SyncFlagDeletedMask,
|
model.FieldJdsSyncStatus: model.SyncFlagDeletedMask,
|
||||||
model.FieldDdSyncStatus: model.SyncFlagDeletedMask,
|
model.FieldDdSyncStatus: model.SyncFlagDeletedMask,
|
||||||
@@ -2262,6 +2272,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
updateFieldMap[model.FieldJdSyncStatus] = 1
|
updateFieldMap[model.FieldJdSyncStatus] = 1
|
||||||
updateFieldMap[model.FieldEbaiSyncStatus] = 1
|
updateFieldMap[model.FieldEbaiSyncStatus] = 1
|
||||||
updateFieldMap[model.FieldMtwmSyncStatus] = 1
|
updateFieldMap[model.FieldMtwmSyncStatus] = 1
|
||||||
|
updateFieldMap[model.FieldTaoSyncStatus] = 1
|
||||||
updateFieldMap[model.FieldDdSyncStatus] = 1
|
updateFieldMap[model.FieldDdSyncStatus] = 1
|
||||||
updateFieldMap[model.FieldUpdatedAt] = 1
|
updateFieldMap[model.FieldUpdatedAt] = 1
|
||||||
updateFieldMap[model.FieldLastOperator] = 1
|
updateFieldMap[model.FieldLastOperator] = 1
|
||||||
@@ -2424,6 +2435,7 @@ func updateStoreSkusSaleWithoutSync(ctx *jxcontext.Context, storeID int, skuBind
|
|||||||
model.FieldJdSyncStatus: skuBind.JdSyncStatus | model.SyncFlagSaleMask,
|
model.FieldJdSyncStatus: skuBind.JdSyncStatus | model.SyncFlagSaleMask,
|
||||||
model.FieldEbaiSyncStatus: skuBind.EbaiSyncStatus | model.SyncFlagSaleMask,
|
model.FieldEbaiSyncStatus: skuBind.EbaiSyncStatus | model.SyncFlagSaleMask,
|
||||||
model.FieldMtwmSyncStatus: skuBind.MtwmSyncStatus | model.SyncFlagSaleMask,
|
model.FieldMtwmSyncStatus: skuBind.MtwmSyncStatus | model.SyncFlagSaleMask,
|
||||||
|
model.FieldTaoSyncStatus: skuBind.TaoSyncStatus | model.SyncFlagSaleMask,
|
||||||
model.FieldDdSyncStatus: skuBind.DdSyncStatus | model.SyncFlagSaleMask,
|
model.FieldDdSyncStatus: skuBind.DdSyncStatus | model.SyncFlagSaleMask,
|
||||||
}
|
}
|
||||||
if utils.IsTimeZero(autoSaleTime) || skuBind.Status == model.SkuStatusNormal {
|
if utils.IsTimeZero(autoSaleTime) || skuBind.Status == model.SkuStatusNormal {
|
||||||
@@ -3195,6 +3207,7 @@ func setStoreSkuBindStatus(skuBind *model.StoreSkuBind, status int8) {
|
|||||||
skuBind.JdSyncStatus |= status
|
skuBind.JdSyncStatus |= status
|
||||||
skuBind.EbaiSyncStatus |= status
|
skuBind.EbaiSyncStatus |= status
|
||||||
skuBind.MtwmSyncStatus |= status
|
skuBind.MtwmSyncStatus |= status
|
||||||
|
skuBind.TaoSyncStatus |= status
|
||||||
skuBind.YbSyncStatus |= status
|
skuBind.YbSyncStatus |= status
|
||||||
skuBind.JdsSyncStatus |= status
|
skuBind.JdsSyncStatus |= status
|
||||||
skuBind.DdSyncStatus |= status
|
skuBind.DdSyncStatus |= status
|
||||||
@@ -5495,6 +5508,7 @@ func buildStoreSkuBindInfosAndFocus(ctx *jxcontext.Context, db *dao.DaoDB, store
|
|||||||
JxPrice: jxPrice,
|
JxPrice: jxPrice,
|
||||||
YbSyncStatus: 0,
|
YbSyncStatus: 0,
|
||||||
MtwmSyncStatus: model.SyncFlagNewMask,
|
MtwmSyncStatus: model.SyncFlagNewMask,
|
||||||
|
TaoSyncStatus: model.SyncFlagNewMask,
|
||||||
JdSyncStatus: model.SyncFlagNewMask,
|
JdSyncStatus: model.SyncFlagNewMask,
|
||||||
EbaiSyncStatus: model.SyncFlagNewMask,
|
EbaiSyncStatus: model.SyncFlagNewMask,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -397,6 +397,8 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin
|
|||||||
status = jxSkuInfo.Skus[0].EbaiSyncStatus
|
status = jxSkuInfo.Skus[0].EbaiSyncStatus
|
||||||
} else if vendorID == model.VendorIDJD {
|
} else if vendorID == model.VendorIDJD {
|
||||||
status = jxSkuInfo.Skus[0].JdSyncStatus
|
status = jxSkuInfo.Skus[0].JdSyncStatus
|
||||||
|
} else if vendorID == model.VendorIDTaoVegetable {
|
||||||
|
status = jxSkuInfo.Skus[0].TaoSyncStatus
|
||||||
}
|
}
|
||||||
syncStatus := utils.Int2Str(int(status))
|
syncStatus := utils.Int2Str(int(status))
|
||||||
toBeCreate := GetBoolName(model.IsSyncStatusNeedCreate(status))
|
toBeCreate := GetBoolName(model.IsSyncStatusNeedCreate(status))
|
||||||
|
|||||||
@@ -69,6 +69,9 @@ func CreateStoreCategoryByStoreSku(ctx *jxcontext.Context, vendorID, storeID int
|
|||||||
}
|
}
|
||||||
|
|
||||||
func SyncStoreCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID, storeID int, vendorStoreID string, nameIDs, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
func SyncStoreCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID, storeID int, vendorStoreID string, nameIDs, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
|
if storeID != 668594 && vendorID == model.VendorIDTaoVegetable {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
handler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler)
|
handler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler)
|
||||||
num := 0
|
num := 0
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
@@ -551,9 +554,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if sku.MergedStatus == model.SkuStatusNormal {
|
if sku.MergedStatus == model.SkuStatusNormal {
|
||||||
if vendorID == model.VendorIDDD {
|
if dao.IsVendorThingIDEmpty(sku.VendorCatID) && !strings.Contains(sku.StoreName, model.ExdStoreName) && vendorID != model.VendorIDYB && vendorID != model.VendorIDDD || vendorID != model.VendorIDJDShop {
|
||||||
createList = append(createList, sku)
|
|
||||||
} else if dao.IsVendorThingIDEmpty(sku.VendorCatID) && !strings.Contains(sku.StoreName, model.ExdStoreName) && vendorID != model.VendorIDYB && vendorID != model.VendorIDJDShop {
|
|
||||||
globals.SugarLogger.Warnf("syncStoreSkuNew 创建门店:%d商品:%d,但没有平台分类ID", storeID, sku.SkuID)
|
globals.SugarLogger.Warnf("syncStoreSkuNew 创建门店:%d商品:%d,但没有平台分类ID", storeID, sku.SkuID)
|
||||||
} else if dao.IsVendorThingIDEmpty(utils.Int64ToStr(sku.VendorVendorCatID)) && vendorID == model.VendorIDJDShop {
|
} else if dao.IsVendorThingIDEmpty(utils.Int64ToStr(sku.VendorVendorCatID)) && vendorID == model.VendorIDJDShop {
|
||||||
globals.SugarLogger.Warnf("syncStoreSkuNew 创建门店:%d商品:%d,但没有映射的平台ID", storeID, sku.SkuID)
|
globals.SugarLogger.Warnf("syncStoreSkuNew 创建门店:%d商品:%d,但没有映射的平台ID", storeID, sku.SkuID)
|
||||||
|
|||||||
@@ -95,22 +95,22 @@ type VendorInfo struct {
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
VendorNames = map[int]string{
|
VendorNames = map[int]string{
|
||||||
VendorIDJD: "Jd",
|
VendorIDJD: "Jd",
|
||||||
VendorIDMTWM: "Mtwm",
|
VendorIDMTWM: "Mtwm",
|
||||||
VendorIDDD: "Dd", // 抖店
|
VendorIDDD: "Dd", // 抖店
|
||||||
VendorIDELM: "Elm",
|
VendorIDELM: "Elm",
|
||||||
VendorIDEBAI: "Ebai",
|
VendorIDEBAI: "Ebai",
|
||||||
VendorIDWSC: "Wsc",
|
VendorIDWSC: "Wsc",
|
||||||
VendorIDYB: "Yb",
|
VendorIDYB: "Yb",
|
||||||
VendorIDJX: "Jx",
|
VendorIDJX: "Jx",
|
||||||
VendorIDJDShop: "Jds",
|
VendorIDJDShop: "Jds",
|
||||||
|
VendorIDTaoVegetable: "Tao",
|
||||||
|
|
||||||
VendorIDDada: "Dada",
|
VendorIDDada: "Dada",
|
||||||
VendorIDMTPS: "Mtps",
|
VendorIDMTPS: "Mtps",
|
||||||
VendorIDFengNiao: "Fn",
|
VendorIDFengNiao: "Fn",
|
||||||
VendorIDSFPS: "Sfps",
|
VendorIDSFPS: "Sfps",
|
||||||
//VendorIDDYPS: "DYPS",
|
VendorIDUUPT: "UUPT",
|
||||||
VendorIDUUPT: "UUPT",
|
|
||||||
|
|
||||||
VendorIDFeiE: "Feie",
|
VendorIDFeiE: "Feie",
|
||||||
VendorIDXiaoWM: "XiaoWM",
|
VendorIDXiaoWM: "XiaoWM",
|
||||||
@@ -132,14 +132,15 @@ var (
|
|||||||
}
|
}
|
||||||
|
|
||||||
VendorChineseNames = map[int]string{
|
VendorChineseNames = map[int]string{
|
||||||
VendorIDJD: "京东到家",
|
VendorIDJD: "京东到家",
|
||||||
VendorIDMTWM: "美团外卖",
|
VendorIDMTWM: "美团外卖",
|
||||||
VendorIDELM: "饿了么",
|
VendorIDELM: "饿了么",
|
||||||
VendorIDEBAI: "饿百新零售",
|
VendorIDEBAI: "饿百新零售",
|
||||||
VendorIDYB: "银豹",
|
VendorIDYB: "银豹",
|
||||||
VendorIDJDShop: "京东商城",
|
VendorIDJDShop: "京东商城",
|
||||||
VendorIDWSC: "微盟微商城",
|
VendorIDWSC: "微盟微商城",
|
||||||
VendorIDJX: "京西商城",
|
VendorIDJX: "京西商城",
|
||||||
|
VendorIDTaoVegetable: "淘先达",
|
||||||
|
|
||||||
VendorIDDada: "达达众包",
|
VendorIDDada: "达达众包",
|
||||||
VendorIDMTPS: "美团配送",
|
VendorIDMTPS: "美团配送",
|
||||||
|
|||||||
@@ -26,12 +26,13 @@ var (
|
|||||||
}
|
}
|
||||||
|
|
||||||
ShopChineseNames = map[int]string{
|
ShopChineseNames = map[int]string{
|
||||||
VendorIDJD: globals.StoreName,
|
VendorIDJD: globals.StoreName,
|
||||||
VendorIDMTWM: globals.StoreNameMtwm,
|
VendorIDMTWM: globals.StoreNameMtwm,
|
||||||
VendorIDELM: globals.StoreNameEbai,
|
VendorIDTaoVegetable: globals.StoreNameTao,
|
||||||
VendorIDEBAI: globals.StoreNameEbai,
|
VendorIDELM: globals.StoreNameEbai,
|
||||||
VendorIDJX: fmt.Sprintf("%s商城", globals.StoreName),
|
VendorIDEBAI: globals.StoreNameEbai,
|
||||||
VendorIDWSC: "微盟微商城",
|
VendorIDJX: fmt.Sprintf("%s商城", globals.StoreName),
|
||||||
|
VendorIDWSC: "微盟微商城",
|
||||||
}
|
}
|
||||||
|
|
||||||
OrderStatusName = map[int]string{
|
OrderStatusName = map[int]string{
|
||||||
@@ -149,11 +150,12 @@ var (
|
|||||||
}
|
}
|
||||||
|
|
||||||
MultiStoresVendorMap = map[int]int{
|
MultiStoresVendorMap = map[int]int{
|
||||||
VendorIDJD: 1,
|
VendorIDJD: 1,
|
||||||
VendorIDMTWM: 0,
|
VendorIDMTWM: 0,
|
||||||
VendorIDELM: 0,
|
VendorIDELM: 0,
|
||||||
VendorIDEBAI: 0,
|
VendorIDEBAI: 0,
|
||||||
VendorIDDD: 0,
|
VendorIDDD: 0,
|
||||||
|
VendorIDTaoVegetable: 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
ZXCityCodeMap = map[int]string{
|
ZXCityCodeMap = map[int]string{
|
||||||
@@ -288,6 +290,8 @@ const (
|
|||||||
OrderStatusEndEnd = 120
|
OrderStatusEndEnd = 120
|
||||||
|
|
||||||
AfsOrderStatusWait4Approve = 155 // 待审核售后单
|
AfsOrderStatusWait4Approve = 155 // 待审核售后单
|
||||||
|
AfsOrderStatusCancelAfs = 156 // 用户取消售后
|
||||||
|
AfsOrderStatusOnSaleAfs = 157 // 用户售中取消
|
||||||
AfsOrderStatusNew = 160 // 已审核或不需要审核售后单
|
AfsOrderStatusNew = 160 // 已审核或不需要审核售后单
|
||||||
AfsOrderStatusWait4ReceiveGoods = 165 // 退款退货的,需要商家确认收到货
|
AfsOrderStatusWait4ReceiveGoods = 165 // 退款退货的,需要商家确认收到货
|
||||||
AfsOrderStatusReceivedGoods = 167 // 已确认收到货
|
AfsOrderStatusReceivedGoods = 167 // 已确认收到货
|
||||||
|
|||||||
@@ -510,6 +510,7 @@ func AddStoreCategoryMap(db *DaoDB, storeID, categoryID int, vendorID int, vendo
|
|||||||
StoreID: storeID,
|
StoreID: storeID,
|
||||||
CategoryID: categoryID,
|
CategoryID: categoryID,
|
||||||
MtwmSyncStatus: model.SyncFlagNewMask,
|
MtwmSyncStatus: model.SyncFlagNewMask,
|
||||||
|
TaoSyncStatus: model.SyncFlagNewMask,
|
||||||
EbaiSyncStatus: model.SyncFlagNewMask,
|
EbaiSyncStatus: model.SyncFlagNewMask,
|
||||||
DdSyncStatus: model.SyncFlagNewMask,
|
DdSyncStatus: model.SyncFlagNewMask,
|
||||||
YbSyncStatus: model.SyncFlagNewMask,
|
YbSyncStatus: model.SyncFlagNewMask,
|
||||||
@@ -533,6 +534,9 @@ func AddStoreCategoryMap(db *DaoDB, storeID, categoryID int, vendorID int, vendo
|
|||||||
} else if vendorID == model.VendorIDDD {
|
} else if vendorID == model.VendorIDDD {
|
||||||
storeCat.DdID = vendorCategoryID
|
storeCat.DdID = vendorCategoryID
|
||||||
storeCat.DdSyncStatus = status
|
storeCat.DdSyncStatus = status
|
||||||
|
} else if vendorID == model.VendorIDTaoVegetable {
|
||||||
|
storeCat.TaoID = vendorCategoryID
|
||||||
|
storeCat.TaoSyncStatus = status
|
||||||
} else {
|
} else {
|
||||||
panic("unsupported vendor")
|
panic("unsupported vendor")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -298,6 +298,7 @@ type StoreSkuExt struct {
|
|||||||
JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
|
JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
|
||||||
EbaiSyncStatus int8 `orm:"default(2)" json:"ebaiSyncStatus"`
|
EbaiSyncStatus int8 `orm:"default(2)" json:"ebaiSyncStatus"`
|
||||||
MtwmSyncStatus int8 `orm:"default(2)" json:"mtwmSyncStatus"`
|
MtwmSyncStatus int8 `orm:"default(2)" json:"mtwmSyncStatus"`
|
||||||
|
TaoSyncStatus int8 `orm:"default(2)" json:"taoSyncStatus"`
|
||||||
DdSyncStatus int8 `orm:"default(2)" json:"ddSyncStatus"`
|
DdSyncStatus int8 `orm:"default(2)" json:"ddSyncStatus"`
|
||||||
YbSyncStatus int8 `orm:"default(2)" json:"ybSyncStatus"`
|
YbSyncStatus int8 `orm:"default(2)" json:"ybSyncStatus"`
|
||||||
JdsSyncStatus int8 `orm:"default(2)" json:"jdsSyncStatus"` //京东商城
|
JdsSyncStatus int8 `orm:"default(2)" json:"jdsSyncStatus"` //京东商城
|
||||||
@@ -372,6 +373,7 @@ type StoreSkuAndName struct {
|
|||||||
StoreSkuSyncInfo
|
StoreSkuSyncInfo
|
||||||
JdSyncStatus int8 `orm:"default(2)"`
|
JdSyncStatus int8 `orm:"default(2)"`
|
||||||
MtwmSyncStatus int8 `orm:"default(2)"`
|
MtwmSyncStatus int8 `orm:"default(2)"`
|
||||||
|
TaoSyncStatus int8 `orm:"default(2)"`
|
||||||
EbaiSyncStatus int8 `orm:"default(2)"`
|
EbaiSyncStatus int8 `orm:"default(2)"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -670,9 +672,6 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
|
|||||||
} else {
|
} else {
|
||||||
fmtParams = append(fmtParams, "''")
|
fmtParams = append(fmtParams, "''")
|
||||||
}
|
}
|
||||||
// if globals.IsStoreSkuAct {
|
|
||||||
// sql += " OR act.sync_status <> 0"
|
|
||||||
// }
|
|
||||||
sql += ")"
|
sql += ")"
|
||||||
} else {
|
} else {
|
||||||
sql += " AND t1.deleted_at = ?"
|
sql += " AND t1.deleted_at = ?"
|
||||||
@@ -682,11 +681,6 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
|
|||||||
sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
||||||
sqlParams = append(sqlParams, skuIDs)
|
sqlParams = append(sqlParams, skuIDs)
|
||||||
}
|
}
|
||||||
// 多门店平台没有成功创建的商品,不直接过滤,让上层同步时报错
|
|
||||||
// if !isSingleStorePF {
|
|
||||||
// sql += " AND t2.%s_id <> 0"
|
|
||||||
// fmtParams = append(fmtParams, fieldPrefix)
|
|
||||||
// }
|
|
||||||
sql = fmt.Sprintf(sql, fmtParams...)
|
sql = fmt.Sprintf(sql, fmtParams...)
|
||||||
sql += " ORDER BY t1.price"
|
sql += " ORDER BY t1.price"
|
||||||
if err = GetRows(db, &skus, sql, sqlParams...); err != nil {
|
if err = GetRows(db, &skus, sql, sqlParams...); err != nil {
|
||||||
@@ -1433,6 +1427,9 @@ func SetStoreSkuBindVendorPrice(storeSkuBind *model.StoreSkuBind, vendorID int,
|
|||||||
case model.VendorIDDD:
|
case model.VendorIDDD:
|
||||||
storeSkuBind.DdPrice = vendorPrice
|
storeSkuBind.DdPrice = vendorPrice
|
||||||
storeSkuBind.DdLockTime = pLockTime
|
storeSkuBind.DdLockTime = pLockTime
|
||||||
|
case model.VendorIDTaoVegetable:
|
||||||
|
storeSkuBind.TaoPrice = vendorPrice
|
||||||
|
storeSkuBind.TaoLockTime = pLockTime
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1448,6 +1445,8 @@ func GetStoreSkuBindVendorPrice(storeSkuBind *model.StoreSkuBind, vendorID int)
|
|||||||
vendorPrice = storeSkuBind.JxPrice
|
vendorPrice = storeSkuBind.JxPrice
|
||||||
case model.VendorIDDD:
|
case model.VendorIDDD:
|
||||||
vendorPrice = storeSkuBind.DdPrice
|
vendorPrice = storeSkuBind.DdPrice
|
||||||
|
case model.VendorIDTaoVegetable:
|
||||||
|
vendorPrice = storeSkuBind.TaoPrice
|
||||||
}
|
}
|
||||||
return vendorPrice
|
return vendorPrice
|
||||||
}
|
}
|
||||||
@@ -1460,6 +1459,9 @@ func SetStoreSkuBindSyncStatus(storeSkuBind *model.StoreSkuBind, vendorID int, s
|
|||||||
storeSkuBind.MtwmSyncStatus = syncStatus
|
storeSkuBind.MtwmSyncStatus = syncStatus
|
||||||
case model.VendorIDEBAI:
|
case model.VendorIDEBAI:
|
||||||
storeSkuBind.EbaiSyncStatus = syncStatus
|
storeSkuBind.EbaiSyncStatus = syncStatus
|
||||||
|
case model.VendorIDTaoVegetable:
|
||||||
|
storeSkuBind.TaoSyncStatus = syncStatus
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1471,6 +1473,8 @@ func GetStoreSkuBindSyncStatus(storeSkuBind *model.StoreSkuBind, vendorID int) (
|
|||||||
syncStatus = storeSkuBind.MtwmSyncStatus
|
syncStatus = storeSkuBind.MtwmSyncStatus
|
||||||
case model.VendorIDEBAI:
|
case model.VendorIDEBAI:
|
||||||
syncStatus = storeSkuBind.EbaiSyncStatus
|
syncStatus = storeSkuBind.EbaiSyncStatus
|
||||||
|
case model.VendorIDTaoVegetable:
|
||||||
|
syncStatus = storeSkuBind.TaoSyncStatus
|
||||||
}
|
}
|
||||||
return syncStatus
|
return syncStatus
|
||||||
}
|
}
|
||||||
@@ -1481,6 +1485,8 @@ func SetStoreCatMapSyncStatus(storeCatMap *model.StoreSkuCategoryMap, vendorID i
|
|||||||
storeCatMap.MtwmSyncStatus = syncStatus
|
storeCatMap.MtwmSyncStatus = syncStatus
|
||||||
case model.VendorIDEBAI:
|
case model.VendorIDEBAI:
|
||||||
storeCatMap.EbaiSyncStatus = syncStatus
|
storeCatMap.EbaiSyncStatus = syncStatus
|
||||||
|
case model.VendorIDTaoVegetable:
|
||||||
|
storeCatMap.TaoSyncStatus = syncStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ const (
|
|||||||
// FieldElmSyncStatus = "ElmSyncStatus"
|
// FieldElmSyncStatus = "ElmSyncStatus"
|
||||||
FieldEbaiSyncStatus = "EbaiSyncStatus"
|
FieldEbaiSyncStatus = "EbaiSyncStatus"
|
||||||
FieldMtwmSyncStatus = "MtwmSyncStatus"
|
FieldMtwmSyncStatus = "MtwmSyncStatus"
|
||||||
|
FieldTaoSyncStatus = "TaoSyncStatus"
|
||||||
FieldDdSyncStatus = "DdSyncStatus"
|
FieldDdSyncStatus = "DdSyncStatus"
|
||||||
// FieldWscSyncStatus = "WscSyncStatus"
|
// FieldWscSyncStatus = "WscSyncStatus"
|
||||||
FieldYbSyncStatus = "YbSyncStatus"
|
FieldYbSyncStatus = "YbSyncStatus"
|
||||||
|
|||||||
@@ -132,12 +132,11 @@ type SkuCategory struct {
|
|||||||
EbaiCategoryID int64 `orm:"column(ebai_category_id)" json:"ebaiCategoryID"` // 这个是指对应的饿百商品类别
|
EbaiCategoryID int64 `orm:"column(ebai_category_id)" json:"ebaiCategoryID"` // 这个是指对应的饿百商品类别
|
||||||
MtwmCategoryID int64 `orm:"column(mtwm_category_id)" json:"mtwmCategoryID"` // 这个是指对应的美团外卖商品类别
|
MtwmCategoryID int64 `orm:"column(mtwm_category_id)" json:"mtwmCategoryID"` // 这个是指对应的美团外卖商品类别
|
||||||
DdCategoryID int64 `orm:"column(dd_category_id)" json:"ddCategoryID"` // 这个是指对应的抖音外卖商品类别
|
DdCategoryID int64 `orm:"column(dd_category_id)" json:"ddCategoryID"` // 这个是指对应的抖音外卖商品类别
|
||||||
|
TaoCategoryID int64 `orm:"column(tao_category_id)" json:"taoCategoryID"` // 这个是指对应的抖音外卖商品类别
|
||||||
YbCategoryID int64 `orm:"column(yb_category_id)" json:"ybCategoryID"` // 这个是指对应的银豹商品类别
|
YbCategoryID int64 `orm:"column(yb_category_id)" json:"ybCategoryID"` // 这个是指对应的银豹商品类别
|
||||||
JdsCategoryID int64 `orm:"column(jds_category_id)" json:"jdsCategoryID"` // 这个是指对应的京东商城类别
|
JdsCategoryID int64 `orm:"column(jds_category_id)" json:"jdsCategoryID"` // 这个是指对应的京东商城类别
|
||||||
GoMeiCategoryID int64 `orm:"column(go_mei_category_id)" json:"goMeiCategoryID"` // 这个是指对应的国美商城类别
|
GoMeiCategoryID int64 `orm:"column(go_mei_category_id)" json:"goMeiCategoryID"` // 这个是指对应的国美商城类别
|
||||||
|
|
||||||
// ElmCategoryID int64 `orm:"column(elm_category_id)" json:"elmCategoryID"` // 这个是指对应的饿了么商品类别
|
|
||||||
// WscCategoryID int64 `orm:"column(wsc_category_id)" json:"wscCategoryID"` // 这个是指对应的美团外卖商品类别
|
|
||||||
Status int8 `orm:"default(1)" json:"status"` //分类状态,0表示禁用,1表示启用
|
Status int8 `orm:"default(1)" json:"status"` //分类状态,0表示禁用,1表示启用
|
||||||
Img string `orm:"size(512)" json:"img"` //分类图片
|
Img string `orm:"size(512)" json:"img"` //分类图片
|
||||||
|
|
||||||
@@ -146,8 +145,6 @@ type SkuCategory struct {
|
|||||||
IsExdSpec int `json:"isExdSpec"` //是否是饿鲜达特有新建的分类
|
IsExdSpec int `json:"isExdSpec"` //是否是饿鲜达特有新建的分类
|
||||||
IsExdSync int `json:"isExdSync"` //饿鲜达分类是否同步到平台
|
IsExdSync int `json:"isExdSync"` //饿鲜达分类是否同步到平台
|
||||||
|
|
||||||
// JdID int64 `orm:"column(jd_id);index" json:"jdID"` // 这个是指商家自己的商品类别在京东平台上的ID
|
|
||||||
// JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
|
|
||||||
IsSync int `json:"isSync"` //是否同步到平台
|
IsSync int `json:"isSync"` //是否同步到平台
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -210,27 +207,21 @@ func (*SkuName) TableIndex() [][]string {
|
|||||||
|
|
||||||
type Sku struct {
|
type Sku struct {
|
||||||
ModelIDCULD
|
ModelIDCULD
|
||||||
|
CategoryID int `orm:"column(category_id)" json:"categoryID"` // 特殊类别,一般用于秒杀,特价之类的特殊类别
|
||||||
CategoryID int `orm:"column(category_id)" json:"categoryID"` // 特殊类别,一般用于秒杀,特价之类的特殊类别
|
NameID int `orm:"column(name_id)" json:"nameID"` // todo 这个索引应该要求唯一
|
||||||
NameID int `orm:"column(name_id)" json:"nameID"` // todo 这个索引应该要求唯一
|
SkuIndex int `json:"-"`
|
||||||
SkuIndex int `json:"-"`
|
Comment string `orm:"size(255)" json:"comment"`
|
||||||
Comment string `orm:"size(255)" json:"comment"`
|
SpecQuality float32 `json:"specQuality"`
|
||||||
SpecQuality float32 `json:"specQuality"`
|
SpecUnit string `orm:"size(8)" json:"specUnit"` // 质量或容量
|
||||||
SpecUnit string `orm:"size(8)" json:"specUnit"` // 质量或容量
|
Weight int `json:"weight"` // 重量/质量,单位为克,当相应的SkuName的SpecUnit为g或kg时,必须等于SpecQuality
|
||||||
Weight int `json:"weight"` // 重量/质量,单位为克,当相应的SkuName的SpecUnit为g或kg时,必须等于SpecQuality
|
Status int `json:"status"`
|
||||||
Status int `json:"status"`
|
Seq int `json:"seq"`
|
||||||
Seq int `json:"seq"`
|
ExdSkuID string `orm:"column(exd_sku_id)" json:"exdSkuID"` //饿鲜达商品ID
|
||||||
|
ExdCategoryThirdID int `orm:"column(exd_category_third_id)" json:"exdCategoryThirdID"`
|
||||||
ExdSkuID string `orm:"column(exd_sku_id)" json:"exdSkuID"` //饿鲜达商品ID
|
EclpID string `orm:"column(eclp_id)" json:"eclpID"` //eclp物料商品ID
|
||||||
ExdCategoryThirdID int `orm:"column(exd_category_third_id)" json:"exdCategoryThirdID"`
|
MinOrderCount int `json:"minOrderCount"` //最少起购份数,美团用
|
||||||
EclpID string `orm:"column(eclp_id)" json:"eclpID"` //eclp物料商品ID
|
LadderBoxNum int `json:"ladderBoxNum"` //包装费x件 ,美团用
|
||||||
MinOrderCount int `json:"minOrderCount"` //最少起购份数,美团用
|
LadderBoxPrice int `json:"ladderBoxPrice"` //包装费y元 ,美团用
|
||||||
LadderBoxNum int `json:"ladderBoxNum"` //包装费x件 ,美团用
|
|
||||||
LadderBoxPrice int `json:"ladderBoxPrice"` //包装费y元 ,美团用
|
|
||||||
// JdID int64 `orm:"column(jd_id);null;index" json:"jdID"`
|
|
||||||
// JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
|
|
||||||
|
|
||||||
// LinkID int `orm:"column(link_id);null;index" json:"linkID"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type SkuAndName struct {
|
type SkuAndName struct {
|
||||||
@@ -291,6 +282,7 @@ type SkuNameExt struct {
|
|||||||
JdsCategoryID string `json:"jdsCategoryID"`
|
JdsCategoryID string `json:"jdsCategoryID"`
|
||||||
EbaiCategoryID string `json:"ebaiCategoryID"`
|
EbaiCategoryID string `json:"ebaiCategoryID"`
|
||||||
MtwmCategoryID string `json:"mtwmCategoryID"`
|
MtwmCategoryID string `json:"mtwmCategoryID"`
|
||||||
|
TaoCategoryID string `json:"TaoCategoryID"`
|
||||||
DdCategoryID string `json:"ddCategoryID"`
|
DdCategoryID string `json:"ddCategoryID"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,21 +55,19 @@ type StoreSkuCategoryMap struct {
|
|||||||
StoreID int `orm:"column(store_id)"`
|
StoreID int `orm:"column(store_id)"`
|
||||||
CategoryID int `orm:"column(category_id)"`
|
CategoryID int `orm:"column(category_id)"`
|
||||||
|
|
||||||
// ElmID int64 `orm:"column(elm_id);index"`
|
|
||||||
EbaiID int64 `orm:"column(ebai_id);index"`
|
EbaiID int64 `orm:"column(ebai_id);index"`
|
||||||
MtwmID string `orm:"column(mtwm_id);index;size(16)"`
|
MtwmID string `orm:"column(mtwm_id);index;size(16)"`
|
||||||
|
TaoID string `orm:"column(tao_id);index;size(16)"`
|
||||||
DdID string `orm:"column(dd_id);index;size(16)"`
|
DdID string `orm:"column(dd_id);index;size(16)"`
|
||||||
// WscID int64 `orm:"column(wsc_id);index"`
|
YbID int64 `orm:"column(yb_id);index"`
|
||||||
|
JdsID int64 `orm:"column(jds_id);index"`
|
||||||
|
|
||||||
// ElmSyncStatus int8 `orm:"default(2)"`
|
|
||||||
EbaiSyncStatus int8 `orm:"default(2)"`
|
EbaiSyncStatus int8 `orm:"default(2)"`
|
||||||
MtwmSyncStatus int8 `orm:"default(2)"`
|
MtwmSyncStatus int8 `orm:"default(2)"`
|
||||||
|
TaoSyncStatus int8 `orm:"default(2)"`
|
||||||
DdSyncStatus int8 `orm:"default(2)"`
|
DdSyncStatus int8 `orm:"default(2)"`
|
||||||
// WscSyncStatus int8 `orm:"default(2)"`
|
YbSyncStatus int8 `orm:"default(2)"`
|
||||||
YbID int64 `orm:"column(yb_id);index"`
|
JdsSyncStatus int8 `orm:"default(2)"`
|
||||||
YbSyncStatus int8 `orm:"default(2)"`
|
|
||||||
JdsID int64 `orm:"column(jds_id);index"`
|
|
||||||
JdsSyncStatus int8 `orm:"default(2)"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*StoreSkuCategoryMap) TableUnique() [][]string {
|
func (*StoreSkuCategoryMap) TableUnique() [][]string {
|
||||||
@@ -113,31 +111,28 @@ type StoreSkuBind struct {
|
|||||||
Status int
|
Status int
|
||||||
|
|
||||||
// ElmID int64 `orm:"column(elm_id);index"`
|
// ElmID int64 `orm:"column(elm_id);index"`
|
||||||
MtwmID int64 `orm:"column(mtwm_id);index"`
|
MtwmID int64 `orm:"column(mtwm_id);index"`
|
||||||
EbaiID int64 `orm:"column(ebai_id);index"`
|
TaoID int64 `orm:"column(tao_id);index"`
|
||||||
YbID int64 `orm:"column(yb_id);index"`
|
EbaiID int64 `orm:"column(ebai_id);index"`
|
||||||
JdsID int64 `orm:"column(jds_id);index"`
|
YbID int64 `orm:"column(yb_id);index"`
|
||||||
JdsWareID int64 `orm:"column(jds_ware_id)"`
|
JdsID int64 `orm:"column(jds_id);index"`
|
||||||
// GmID string `orm:"column(gm_id)"`
|
JdsWareID int64 `orm:"column(jds_ware_id)"`
|
||||||
// WscID int64 `orm:"column(wsc_id);index"` // 表示微盟skuId
|
|
||||||
// WscID2 int64 `orm:"column(wsc_id2);index"` // 表示微盟goodsId
|
|
||||||
DdID int64 `orm:"column(dd_id);index"` // 子品主商品id
|
DdID int64 `orm:"column(dd_id);index"` // 子品主商品id
|
||||||
VendorSonSkuID string `orm:"column(vendor_son_sku_id)"` // 子商品skuid
|
VendorSonSkuID string `orm:"column(vendor_son_sku_id)"` // 子商品skuid
|
||||||
VendorSkuAttrId string `orm:"column(vendor_sku_attr_id)"` // 抖音需要,主品skuid
|
VendorSkuAttrId string `orm:"column(vendor_sku_attr_id)"` // 抖音需要,主品skuid
|
||||||
VendorMainId string `orm:"column(vendor_Main_id)"` // 抖音需要,商品主id
|
VendorMainId string `orm:"column(vendor_Main_id)"` // 抖音需要,商品主id
|
||||||
|
|
||||||
// ElmSyncStatus int8 `orm:"default(2)"`
|
|
||||||
JdSyncStatus int8 `orm:"default(2)"`
|
JdSyncStatus int8 `orm:"default(2)"`
|
||||||
MtwmSyncStatus int8 `orm:"default(2)"`
|
MtwmSyncStatus int8 `orm:"default(2)"`
|
||||||
|
TaoSyncStatus int8 `orm:"default(2)"`
|
||||||
DdSyncStatus int8 `orm:"default(2)"`
|
DdSyncStatus int8 `orm:"default(2)"`
|
||||||
EbaiSyncStatus int8 `orm:"default(2)"`
|
EbaiSyncStatus int8 `orm:"default(2)"`
|
||||||
YbSyncStatus int8 `orm:"default(2)"`
|
YbSyncStatus int8 `orm:"default(2)"`
|
||||||
JdsSyncStatus int8 `orm:"default(2)"` //京东商城
|
JdsSyncStatus int8 `orm:"default(2)"` //京东商城
|
||||||
//GmSyncStatus int8 `orm:"default(2)"` //京东商城
|
|
||||||
// WscSyncStatus int8 `orm:"default(2)"`
|
|
||||||
|
|
||||||
JdPrice int `json:"jdPrice"`
|
JdPrice int `json:"jdPrice"`
|
||||||
MtwmPrice int `json:"mtwmPrice"`
|
MtwmPrice int `json:"mtwmPrice"`
|
||||||
|
TaoPrice int `json:"taoPrice"`
|
||||||
EbaiPrice int `json:"ebaiPrice"`
|
EbaiPrice int `json:"ebaiPrice"`
|
||||||
JxPrice int `json:"jxPrice"`
|
JxPrice int `json:"jxPrice"`
|
||||||
DdPrice int `json:"ddPrice"`
|
DdPrice int `json:"ddPrice"`
|
||||||
@@ -148,6 +143,7 @@ type StoreSkuBind struct {
|
|||||||
JdLockTime *time.Time `orm:"null" json:"jdLockTime"`
|
JdLockTime *time.Time `orm:"null" json:"jdLockTime"`
|
||||||
JdsLockTime *time.Time `orm:"null" json:"jdsLockTime"`
|
JdsLockTime *time.Time `orm:"null" json:"jdsLockTime"`
|
||||||
MtwmLockTime *time.Time `orm:"null" json:"mtwmLockTime"`
|
MtwmLockTime *time.Time `orm:"null" json:"mtwmLockTime"`
|
||||||
|
TaoLockTime *time.Time `orm:"null" json:"taoLockTime"`
|
||||||
EbaiLockTime *time.Time `orm:"null" json:"ebaiLockTime"`
|
EbaiLockTime *time.Time `orm:"null" json:"ebaiLockTime"`
|
||||||
JxLockTime *time.Time `orm:"null" json:"jxLockTime"`
|
JxLockTime *time.Time `orm:"null" json:"jxLockTime"`
|
||||||
YbLockTime *time.Time `orm:"null" json:"ybLockTime"`
|
YbLockTime *time.Time `orm:"null" json:"ybLockTime"`
|
||||||
|
|||||||
@@ -110,58 +110,68 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap
|
|||||||
default:
|
default:
|
||||||
order.Status = model.WaybillStatusUnknown
|
order.Status = model.WaybillStatusUnknown
|
||||||
}
|
}
|
||||||
|
|
||||||
err := dadaapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), utils.Int2Str(order.Status))
|
err := dadaapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), utils.Int2Str(order.Status))
|
||||||
defer delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
|
||||||
if order.OrderVendorID == model.VendorIDDD {
|
switch order.OrderVendorID {
|
||||||
result := &mtpsapi.RiderInfo{
|
case model.VendorIDDD:
|
||||||
OrderId: order.VendorOrderID,
|
tiktokStatusPush(order, msg.OrderStatus)
|
||||||
ThirdCarrierOrderId: order.VendorOrderID,
|
case model.VendorIDMTWM, model.VendorIDTaoVegetable:
|
||||||
CourierName: order.CourierName,
|
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||||
CourierPhone: order.CourierMobile,
|
|
||||||
LogisticsProviderCode: "10002",
|
|
||||||
LogisticsStatus: order.Status,
|
|
||||||
OpCode: "",
|
|
||||||
}
|
|
||||||
switch msg.OrderStatus {
|
|
||||||
case dadaapi.OrderStatusWaitingForAccept: // 待接单,召唤骑手
|
|
||||||
result.LogisticsStatus = model.WaybillStatusNew
|
|
||||||
result.LogisticsContext = model.RiderWaitRider
|
|
||||||
case dadaapi.OrderStatusAccepted: // 待取货
|
|
||||||
result.LogisticsStatus = model.WaybillStatusCourierAssigned // 分配骑手
|
|
||||||
result.LogisticsContext = model.RiderWaitGetGoods
|
|
||||||
case dadaapi.OrderStatusDelivering: // 配送中
|
|
||||||
result.LogisticsStatus = model.WaybillStatusDelivering
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDelivering
|
|
||||||
case dadaapi.OrderStatusFinished: // 完成
|
|
||||||
result.LogisticsStatus = model.WaybillStatusDelivered
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDelivered
|
|
||||||
case dadaapi.OrderStatusCanceled: // 取消
|
|
||||||
result.LogisticsStatus = model.WaybillStatusCanceled
|
|
||||||
result.LogisticsContext = model.RiderGetOrderCanceled
|
|
||||||
case 8: // 指派单,不处理
|
|
||||||
result.LogisticsStatus = 0
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
|
||||||
case 9: // 配送异常返回值
|
|
||||||
result.LogisticsStatus = model.WaybillStatusDeliverFailed
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDeliverFailed
|
|
||||||
case 10: // 妥投异常之物品返回完成 - 不处理
|
|
||||||
result.LogisticsStatus = 0
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
|
||||||
case dadaapi.OrderStatusReturningInOrder: // 骑手到店
|
|
||||||
result.LogisticsStatus = model.WaybillStatusCourierArrived
|
|
||||||
result.LogisticsContext = model.RiderToStore
|
|
||||||
case dadaapi.OrderStatusAddOrderFailed: // 创建达达运单失败 - 不处理
|
|
||||||
result.LogisticsStatus = model.WaybillStatusFailed
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
|
||||||
default:
|
|
||||||
result.LogisticsStatus = 0
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
|
||||||
}
|
|
||||||
delivery.PullTiktokRiderInfo(result)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 抖音订单状态回传
|
||||||
|
func tiktokStatusPush(order *model.Waybill, status int) {
|
||||||
|
result := &mtpsapi.RiderInfo{
|
||||||
|
OrderId: order.VendorOrderID,
|
||||||
|
ThirdCarrierOrderId: order.VendorOrderID,
|
||||||
|
CourierName: order.CourierName,
|
||||||
|
CourierPhone: order.CourierMobile,
|
||||||
|
LogisticsProviderCode: "10002",
|
||||||
|
LogisticsStatus: order.Status,
|
||||||
|
OpCode: "",
|
||||||
|
}
|
||||||
|
switch status {
|
||||||
|
case dadaapi.OrderStatusWaitingForAccept: // 待接单,召唤骑手
|
||||||
|
result.LogisticsStatus = model.WaybillStatusNew
|
||||||
|
result.LogisticsContext = model.RiderWaitRider
|
||||||
|
case dadaapi.OrderStatusAccepted: // 待取货
|
||||||
|
result.LogisticsStatus = model.WaybillStatusCourierAssigned // 分配骑手
|
||||||
|
result.LogisticsContext = model.RiderWaitGetGoods
|
||||||
|
case dadaapi.OrderStatusDelivering: // 配送中
|
||||||
|
result.LogisticsStatus = model.WaybillStatusDelivering
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDelivering
|
||||||
|
case dadaapi.OrderStatusFinished: // 完成
|
||||||
|
result.LogisticsStatus = model.WaybillStatusDelivered
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDelivered
|
||||||
|
case dadaapi.OrderStatusCanceled: // 取消
|
||||||
|
result.LogisticsStatus = model.WaybillStatusCanceled
|
||||||
|
result.LogisticsContext = model.RiderGetOrderCanceled
|
||||||
|
case 8: // 指派单,不处理
|
||||||
|
result.LogisticsStatus = 0
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
||||||
|
case 9: // 配送异常返回值
|
||||||
|
result.LogisticsStatus = model.WaybillStatusDeliverFailed
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDeliverFailed
|
||||||
|
case 10: // 妥投异常之物品返回完成 - 不处理
|
||||||
|
result.LogisticsStatus = 0
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
||||||
|
case dadaapi.OrderStatusReturningInOrder: // 骑手到店
|
||||||
|
result.LogisticsStatus = model.WaybillStatusCourierArrived
|
||||||
|
result.LogisticsContext = model.RiderToStore
|
||||||
|
case dadaapi.OrderStatusAddOrderFailed: // 创建达达运单失败 - 不处理
|
||||||
|
result.LogisticsStatus = model.WaybillStatusFailed
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
||||||
|
default:
|
||||||
|
result.LogisticsStatus = 0
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
||||||
|
}
|
||||||
|
delivery.PullTiktokRiderInfo(result)
|
||||||
|
}
|
||||||
|
|
||||||
func (c *DeliveryHandler) callbackMsg2Waybill(msg *dadaapi.CallbackMsg) (retVal *model.Waybill, goods *model.GoodsOrder) {
|
func (c *DeliveryHandler) callbackMsg2Waybill(msg *dadaapi.CallbackMsg) (retVal *model.Waybill, goods *model.GoodsOrder) {
|
||||||
retVal = &model.Waybill{
|
retVal = &model.Waybill{
|
||||||
VendorWaybillID: msg.ClientID,
|
VendorWaybillID: msg.ClientID,
|
||||||
@@ -604,32 +614,32 @@ func (c *DeliveryHandler) GetDeliverLiquidatedDamages(orderId string, deliverId
|
|||||||
|
|
||||||
// 直接返回的 原因是,一个订单在达达发布多次运单时,QueryOrderInfo获取到的运单始终是最后一个运单的配送价格!所以直接返回算了!
|
// 直接返回的 原因是,一个订单在达达发布多次运单时,QueryOrderInfo获取到的运单始终是最后一个运单的配送价格!所以直接返回算了!
|
||||||
return localPrice, nil
|
return localPrice, nil
|
||||||
// 平台状态兑换金额
|
//// 平台状态兑换金额
|
||||||
var vendorPrice int64 = 0
|
//var vendorPrice int64 = 0
|
||||||
// 未接单不扣款
|
//// 未接单不扣款
|
||||||
if dadaOrder.AcceptTime == "" {
|
//if dadaOrder.AcceptTime == "" {
|
||||||
vendorPrice = 0
|
// vendorPrice = 0
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// 有了接单时间,订单变成了待取货
|
//// 有了接单时间,订单变成了待取货
|
||||||
if dadaOrder.AcceptTime != "" && dadaOrder.FetchTime == "" {
|
//if dadaOrder.AcceptTime != "" && dadaOrder.FetchTime == "" {
|
||||||
nowTime := time.Now().Unix()
|
// nowTime := time.Now().Unix()
|
||||||
fetchTime := utils.Str2Time(dadaOrder.AcceptTime).Unix()
|
// fetchTime := utils.Str2Time(dadaOrder.AcceptTime).Unix()
|
||||||
timeDiffer := nowTime - fetchTime
|
// timeDiffer := nowTime - fetchTime
|
||||||
if timeDiffer > 15*60 || timeDiffer < 60 {
|
// if timeDiffer > 15*60 || timeDiffer < 60 {
|
||||||
vendorPrice = 0
|
// vendorPrice = 0
|
||||||
}
|
// }
|
||||||
vendorPrice = 200
|
// vendorPrice = 200
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// fetchTime 已经有时间了,代表已经取货.次数取消扣除此订单全部金额
|
//// fetchTime 已经有时间了,代表已经取货.次数取消扣除此订单全部金额
|
||||||
// 达达存在多个订单的运单违约金额统计在一起的情况
|
//// 达达存在多个订单的运单违约金额统计在一起的情况
|
||||||
if dadaOrder.FetchTime != "" {
|
//if dadaOrder.FetchTime != "" {
|
||||||
vendorPrice = utils.Float64TwoInt64(dadaOrder.DeliveryFee * float64(100))
|
// vendorPrice = utils.Float64TwoInt64(dadaOrder.DeliveryFee * float64(100))
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
if localPrice > vendorPrice {
|
//if localPrice > vendorPrice {
|
||||||
return localPrice, nil
|
// return localPrice, nil
|
||||||
}
|
//}
|
||||||
return vendorPrice, nil
|
//return vendorPrice, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,7 +69,6 @@ func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int,
|
|||||||
}
|
}
|
||||||
parameter.PartnerOrderCode = bill.VendorOrderID
|
parameter.PartnerOrderCode = bill.VendorOrderID
|
||||||
if err = api.FnAPI.CancelOrder(parameter); err != nil {
|
if err = api.FnAPI.CancelOrder(parameter); err != nil {
|
||||||
globals.SugarLogger.Debugf("============err := %v ", err)
|
|
||||||
if strings.Contains(err.Error(), "运单暂未生成") {
|
if strings.Contains(err.Error(), "运单暂未生成") {
|
||||||
err = nil
|
err = nil
|
||||||
}
|
}
|
||||||
@@ -280,49 +279,55 @@ func OnWaybillMsg(msg *fnpsapi.OrderStatusNottify, resultParam *fnpsapi.ShortSta
|
|||||||
return fnpsapi.Err2CallbackResponse(err, "")
|
return fnpsapi.Err2CallbackResponse(err, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
if order.OrderVendorID == model.VendorIDDD {
|
switch order.OrderVendorID {
|
||||||
result := &mtpsapi.RiderInfo{
|
case model.VendorIDDD:
|
||||||
OrderId: order.VendorOrderID,
|
tiktokStatusPush(order, orderStatus)
|
||||||
ThirdCarrierOrderId: order.VendorOrderID,
|
case model.VendorIDMTWM, model.VendorIDTaoVegetable:
|
||||||
CourierName: order.CourierName,
|
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||||
CourierPhone: order.CourierMobile,
|
|
||||||
LogisticsProviderCode: "10002",
|
|
||||||
LogisticsStatus: order.Status,
|
|
||||||
OpCode: "",
|
|
||||||
}
|
|
||||||
switch orderStatus {
|
|
||||||
case fnpsapi.OrderStatusAcceptCreate, fnpsapi.OrderStatusAccept: // 待接单,召唤骑手
|
|
||||||
result.LogisticsStatus = model.WaybillStatusNew
|
|
||||||
result.LogisticsContext = model.RiderWaitRider
|
|
||||||
case fnpsapi.OrderStatusAssigned: //20分配骑手 待取货
|
|
||||||
result.LogisticsStatus = model.WaybillStatusCourierAssigned // 分配骑手
|
|
||||||
result.LogisticsContext = model.RiderWaitGetGoods
|
|
||||||
case fnpsapi.OrderStatusDelivering: // 2 配送中 // 配送中
|
|
||||||
result.LogisticsStatus = model.WaybillStatusDelivering
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDelivering
|
|
||||||
case fnpsapi.OrderStatusDelivered: // 3 已经送达 // 完成
|
|
||||||
result.LogisticsStatus = model.WaybillStatusDelivered
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDelivered
|
|
||||||
case fnpsapi.OrderStatusAcceptCacle: // 取消
|
|
||||||
result.LogisticsStatus = model.WaybillStatusCanceled
|
|
||||||
result.LogisticsContext = model.RiderGetOrderCanceled
|
|
||||||
case fnpsapi.OrderStatusException: // 5 异常: // 配送异常返回值
|
|
||||||
result.LogisticsStatus = model.WaybillStatusDeliverFailed
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDeliverFailed
|
|
||||||
case fnpsapi.OrderStatusArrived: // 80 到店 // 骑手到店
|
|
||||||
result.LogisticsStatus = model.WaybillStatusCourierArrived
|
|
||||||
result.LogisticsContext = model.RiderToStore
|
|
||||||
default:
|
|
||||||
result.LogisticsStatus = 0
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
|
||||||
}
|
|
||||||
delivery.PullTiktokRiderInfo(result)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
defer delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
|
||||||
return fnpsapi.Err2CallbackResponse(nil, "")
|
return fnpsapi.Err2CallbackResponse(nil, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 抖音订单状态回传
|
||||||
|
func tiktokStatusPush(order *model.Waybill, orderStatus int64) {
|
||||||
|
result := &mtpsapi.RiderInfo{
|
||||||
|
OrderId: order.VendorOrderID,
|
||||||
|
ThirdCarrierOrderId: order.VendorOrderID,
|
||||||
|
CourierName: order.CourierName,
|
||||||
|
CourierPhone: order.CourierMobile,
|
||||||
|
LogisticsProviderCode: "10002",
|
||||||
|
LogisticsStatus: order.Status,
|
||||||
|
OpCode: "",
|
||||||
|
}
|
||||||
|
switch orderStatus {
|
||||||
|
case fnpsapi.OrderStatusAcceptCreate, fnpsapi.OrderStatusAccept: // 待接单,召唤骑手
|
||||||
|
result.LogisticsStatus = model.WaybillStatusNew
|
||||||
|
result.LogisticsContext = model.RiderWaitRider
|
||||||
|
case fnpsapi.OrderStatusAssigned: //20分配骑手 待取货
|
||||||
|
result.LogisticsStatus = model.WaybillStatusCourierAssigned // 分配骑手
|
||||||
|
result.LogisticsContext = model.RiderWaitGetGoods
|
||||||
|
case fnpsapi.OrderStatusDelivering: // 2 配送中 // 配送中
|
||||||
|
result.LogisticsStatus = model.WaybillStatusDelivering
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDelivering
|
||||||
|
case fnpsapi.OrderStatusDelivered: // 3 已经送达 // 完成
|
||||||
|
result.LogisticsStatus = model.WaybillStatusDelivered
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDelivered
|
||||||
|
case fnpsapi.OrderStatusAcceptCacle: // 取消
|
||||||
|
result.LogisticsStatus = model.WaybillStatusCanceled
|
||||||
|
result.LogisticsContext = model.RiderGetOrderCanceled
|
||||||
|
case fnpsapi.OrderStatusException: // 5 异常: // 配送异常返回值
|
||||||
|
result.LogisticsStatus = model.WaybillStatusDeliverFailed
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDeliverFailed
|
||||||
|
case fnpsapi.OrderStatusArrived: // 80 到店 // 骑手到店
|
||||||
|
result.LogisticsStatus = model.WaybillStatusCourierArrived
|
||||||
|
result.LogisticsContext = model.RiderToStore
|
||||||
|
default:
|
||||||
|
result.LogisticsStatus = 0
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
||||||
|
}
|
||||||
|
delivery.PullTiktokRiderInfo(result)
|
||||||
|
}
|
||||||
|
|
||||||
// 异常报备
|
// 异常报备
|
||||||
func OnWaybillExceptFn(msg *fnpsapi.AbnormalReportNotify) (retVal *fnpsapi.CallbackResponse) {
|
func OnWaybillExceptFn(msg *fnpsapi.AbnormalReportNotify) (retVal *fnpsapi.CallbackResponse) {
|
||||||
return CurDeliveryHandler.OnWaybillExcept(msg)
|
return CurDeliveryHandler.OnWaybillExcept(msg)
|
||||||
|
|||||||
@@ -96,19 +96,13 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
order2, _ := partner.CurOrderManager.LoadOrder(order.VendorOrderID, order.OrderVendorID)
|
|
||||||
//查不到订单可能就是果园的订单
|
|
||||||
if order2 == nil {
|
|
||||||
c.pushToGy(msg)
|
|
||||||
return mtpsapi.SuccessResponse
|
|
||||||
}
|
|
||||||
|
|
||||||
store, _ := dao.GetStoreDetail(dao.GetDB(), goodsOrder.JxStoreID, goodsOrder.VendorID, goodsOrder.VendorOrgCode)
|
store, _ := dao.GetStoreDetail(dao.GetDB(), goodsOrder.JxStoreID, goodsOrder.VendorID, goodsOrder.VendorOrgCode)
|
||||||
switch msg.Status {
|
switch msg.Status {
|
||||||
case mtpsapi.OrderStatusWaitingForSchedule:
|
case mtpsapi.OrderStatusWaitingForSchedule:
|
||||||
data, err := api.MtpsAPI.QueryOrderStatus(msg.DeliveryID, msg.MtPeisongID)
|
data, err := api.MtpsAPI.QueryOrderStatus(msg.DeliveryID, msg.MtPeisongID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mtpsapi.Err2CallbackResponse(err, fmt.Sprintf("%s", "获取订单状态错误"))
|
globals.SugarLogger.Debugf("获取运单信息错误,可能是果园运单:%s,%v", utils.Format4Output(msg, false), err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
order.DesiredFee = utils.Float64TwoInt64(utils.MustInterface2Float64(data["delivery_fee"]) * 100)
|
order.DesiredFee = utils.Float64TwoInt64(utils.MustInterface2Float64(data["delivery_fee"]) * 100)
|
||||||
order.ActualFee = utils.Float64TwoInt64(utils.MustInterface2Float64(data["pay_amount"]) * 100)
|
order.ActualFee = utils.Float64TwoInt64(utils.MustInterface2Float64(data["pay_amount"]) * 100)
|
||||||
@@ -117,7 +111,8 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m
|
|||||||
case mtpsapi.OrderStatusAccepted: // 已接单
|
case mtpsapi.OrderStatusAccepted: // 已接单
|
||||||
data, err := api.MtpsAPI.QueryOrderStatus(msg.DeliveryID, msg.MtPeisongID)
|
data, err := api.MtpsAPI.QueryOrderStatus(msg.DeliveryID, msg.MtPeisongID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mtpsapi.Err2CallbackResponse(err, fmt.Sprintf("%s", "获取订单状态错误"))
|
globals.SugarLogger.Debugf("获取运单信息错误,可能是果园运单:%s,%v", utils.Format4Output(msg, false), err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
order.DesiredFee = utils.Float64TwoInt64(utils.MustInterface2Float64(data["delivery_fee"]) * 100)
|
order.DesiredFee = utils.Float64TwoInt64(utils.MustInterface2Float64(data["delivery_fee"]) * 100)
|
||||||
order.ActualFee = utils.Float64TwoInt64(utils.MustInterface2Float64(data["pay_amount"]) * 100)
|
order.ActualFee = utils.Float64TwoInt64(utils.MustInterface2Float64(data["pay_amount"]) * 100)
|
||||||
@@ -134,17 +129,21 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m
|
|||||||
return mtpsapi.SuccessResponse
|
return mtpsapi.SuccessResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
//if msg.Status == mtpsapi.OrderStatusPickedUp {
|
order2, _ := partner.CurOrderManager.LoadOrder(order.VendorOrderID, order.OrderVendorID)
|
||||||
// order.Status = model.WaybillStatusCourierArrived
|
//查不到订单可能就是果园的订单
|
||||||
// mtpsapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), order.VendorStatus)
|
if order2 == nil && beego.BConfig.RunMode != "jxgy" {
|
||||||
// delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
c.pushToGy(msg)
|
||||||
// msg.Status = mtpsapi.OrderStatusPickedUp
|
return mtpsapi.SuccessResponse
|
||||||
//}
|
}
|
||||||
|
|
||||||
// 加入调度器
|
// 加入调度器
|
||||||
err := mtpsapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), order.VendorStatus)
|
err := mtpsapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), order.VendorStatus)
|
||||||
defer delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
|
||||||
if order.OrderVendorID == model.VendorIDDD {
|
switch order.OrderVendorID {
|
||||||
|
case model.VendorIDDD:
|
||||||
pushMTPSToTiktok(msg.Status, order)
|
pushMTPSToTiktok(msg.Status, order)
|
||||||
|
case model.VendorIDMTWM, model.VendorIDTaoVegetable:
|
||||||
|
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ package delivery
|
|||||||
import (
|
import (
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||||
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
"math/big"
|
"math/big"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -19,6 +21,7 @@ import (
|
|||||||
"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"
|
||||||
|
utilsTao "git.rosy.net.cn/jx-callback/business/partner/purchase/tao_vegetable"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -88,9 +91,6 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
|
|||||||
//3.当同一个订单已经上传了一次配送信息,如再次同步会更新配送信息,以最新的一次为准。
|
//3.当同一个订单已经上传了一次配送信息,如再次同步会更新配送信息,以最新的一次为准。
|
||||||
//4.如订单已完成、已取消等状态发货将失败。
|
//4.如订单已完成、已取消等状态发货将失败。
|
||||||
for _, v := range orders {
|
for _, v := range orders {
|
||||||
//if v.Status >= model.OrderStatusFinished || v.Status < model.OrderStatusDelivering {
|
|
||||||
// continue
|
|
||||||
//}
|
|
||||||
if orderId == "" && v.VendorID == model.VendorIDDD { // 抖音门店订单除了三方配送回调时推送,不在主动推送配送消息
|
if orderId == "" && v.VendorID == model.VendorIDDD { // 抖音门店订单除了三方配送回调时推送,不在主动推送配送消息
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -134,6 +134,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
|
|||||||
riderInfo.LogisticsStatus = v.Status
|
riderInfo.LogisticsStatus = v.Status
|
||||||
}
|
}
|
||||||
|
|
||||||
|
taoDeliveryStatus := ""
|
||||||
switch riderInfo.LogisticsStatus {
|
switch riderInfo.LogisticsStatus {
|
||||||
case 5: // 呼叫骑手
|
case 5: // 呼叫骑手
|
||||||
riderInfo.LogisticsStatus = 0
|
riderInfo.LogisticsStatus = 0
|
||||||
@@ -147,12 +148,15 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
|
|||||||
case 20: //配送中
|
case 20: //配送中
|
||||||
riderInfo.LogisticsStatus = 20
|
riderInfo.LogisticsStatus = 20
|
||||||
riderInfo.OpCode = tiktok_api.TiktokLogisticsRIDERPICKUP
|
riderInfo.OpCode = tiktok_api.TiktokLogisticsRIDERPICKUP
|
||||||
|
taoDeliveryStatus = tao_vegetable.OrderStatusDelivery // 配送中
|
||||||
case 110: // 完成
|
case 110: // 完成
|
||||||
riderInfo.LogisticsStatus = 40
|
riderInfo.LogisticsStatus = 40
|
||||||
riderInfo.OpCode = tiktok_api.TiktokLogisticsDELIVERED
|
riderInfo.OpCode = tiktok_api.TiktokLogisticsDELIVERED
|
||||||
|
taoDeliveryStatus = tao_vegetable.OrderStatusDeliveryOver // 完成
|
||||||
case 105: // 完成
|
case 105: // 完成
|
||||||
riderInfo.LogisticsStatus = 40
|
riderInfo.LogisticsStatus = 40
|
||||||
riderInfo.OpCode = tiktok_api.TiktokLogisticsDELIVERED
|
riderInfo.OpCode = tiktok_api.TiktokLogisticsDELIVERED
|
||||||
|
taoDeliveryStatus = tao_vegetable.OrderStatusDeliveryOver // 完成
|
||||||
case 115: // 取消
|
case 115: // 取消
|
||||||
riderInfo.CourierName = ""
|
riderInfo.CourierName = ""
|
||||||
riderInfo.CourierPhone = ""
|
riderInfo.CourierPhone = ""
|
||||||
@@ -161,24 +165,28 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
|
|||||||
case 22, 0, 120: // 异常配送
|
case 22, 0, 120: // 异常配送
|
||||||
riderInfo.LogisticsStatus = 22
|
riderInfo.LogisticsStatus = 22
|
||||||
riderInfo.OpCode = tiktok_api.TiktokLogisticsINDDELIVERYEXCEPTION
|
riderInfo.OpCode = tiktok_api.TiktokLogisticsINDDELIVERYEXCEPTION
|
||||||
|
taoDeliveryStatus = tao_vegetable.OrderStatusUserRejection // 完成
|
||||||
default:
|
default:
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if riderInfo.Longitude == "" {
|
storeDetail, err := dao.GetStoreDetail(dao.GetDB(), v.JxStoreID, 0, "")
|
||||||
riderInfo.Longitude = utils.Float64ToStr(utils.Int2Float64(v.ConsigneeLng) / 1000000)
|
|
||||||
}
|
|
||||||
if riderInfo.Latitude == "" {
|
|
||||||
riderInfo.Latitude = utils.Float64ToStr(utils.Int2Float64(v.ConsigneeLat) / 1000000)
|
|
||||||
}
|
|
||||||
|
|
||||||
if riderInfo.CourierPhone == "" {
|
if riderInfo.CourierPhone == "" {
|
||||||
storeDetail, err := dao.GetStoreDetail(dao.GetDB(), v.JxStoreID, 0, "")
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
riderInfo.CourierPhone = storeDetail.Tel1
|
riderInfo.CourierPhone = storeDetail.Tel1
|
||||||
}
|
}
|
||||||
riderInfo.CourierName = "老板"
|
riderInfo.CourierName = "老板"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if riderInfo.Longitude == "" && riderInfo.LogisticsStatus != 105 {
|
||||||
|
riderInfo.Longitude = utils.Float64ToStr(utils.Int2Float64(storeDetail.Lng) / 1000000)
|
||||||
|
riderInfo.Latitude = utils.Float64ToStr(utils.Int2Float64(storeDetail.Lat) / 1000000)
|
||||||
|
}
|
||||||
|
if riderInfo.Longitude == "" && riderInfo.LogisticsStatus == 105 {
|
||||||
|
riderInfo.Longitude = utils.Float64ToStr(utils.Int2Float64(v.ConsigneeLng) / 1000000)
|
||||||
|
riderInfo.Latitude = utils.Float64ToStr(utils.Int2Float64(v.ConsigneeLat) / 1000000)
|
||||||
|
}
|
||||||
|
|
||||||
if riderInfo.CourierPhone == "" {
|
if riderInfo.CourierPhone == "" {
|
||||||
riderInfo.CourierName = "石锋"
|
riderInfo.CourierName = "石锋"
|
||||||
riderInfo.CourierPhone = "18048531223"
|
riderInfo.CourierPhone = "18048531223"
|
||||||
@@ -186,6 +194,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
|
|||||||
if riderInfo.ThirdCarrierOrderId == "" {
|
if riderInfo.ThirdCarrierOrderId == "" {
|
||||||
riderInfo.ThirdCarrierOrderId = riderInfo.OrderId + "_fake"
|
riderInfo.ThirdCarrierOrderId = riderInfo.OrderId + "_fake"
|
||||||
}
|
}
|
||||||
|
|
||||||
// 目前只推送美团骑手信息
|
// 目前只推送美团骑手信息
|
||||||
switch v.VendorID {
|
switch v.VendorID {
|
||||||
case model.VendorIDMTWM: // 美团订单
|
case model.VendorIDMTWM: // 美团订单
|
||||||
@@ -212,6 +221,20 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
|
|||||||
continue
|
continue
|
||||||
case model.VendorIDJX: // 京西平台
|
case model.VendorIDJX: // 京西平台
|
||||||
continue
|
continue
|
||||||
|
case model.VendorIDTaoVegetable: // 淘鲜达
|
||||||
|
// 定时任务刷新骑手坐标
|
||||||
|
if orderId == "" {
|
||||||
|
if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil {
|
||||||
|
if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorStoreID, utils.Struct2Map(riderInfo, "", true)); err != nil {
|
||||||
|
globals.SugarLogger.Errorf("Error pushing meituan rider information :%s--%s--%v", v.VendorOrderID, utils.Format4Output(riderInfo, false), err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else { // 订单状态改变 [配送中/用户签收/用户拒收]
|
||||||
|
param := utilsTao.OrderStatusChangeDelivery(&v.GoodsOrder, taoDeliveryStatus)
|
||||||
|
if err := api.TaoVegetableApi.DeliveryFinish(param); err != nil {
|
||||||
|
globals.SugarLogger.Debugf("淘先达运单状态推送错误运单状态[%s],错误:%s", taoDeliveryStatus, err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
globals.SugarLogger.Errorf("Order source error, non system order: %s", v.VendorOrderID)
|
globals.SugarLogger.Errorf("Order source error, non system order: %s", v.VendorOrderID)
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -382,54 +382,58 @@ func OnWaybillMsg(urlIndex string, msg interface{}) (resp *sfps2.CallbackRespons
|
|||||||
globals.SugarLogger.Warnf("onWaybillMsg unknown msg:%v", msg)
|
globals.SugarLogger.Warnf("onWaybillMsg unknown msg:%v", msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
globals.SugarLogger.Debugf("SFPS OnWaybillMsg order=%s", utils.Format4Output(order, false))
|
|
||||||
if err := partner.CurOrderManager.OnWaybillStatusChanged(order); err != nil {
|
if err := partner.CurOrderManager.OnWaybillStatusChanged(order); err != nil {
|
||||||
return sfps2.Err2CallbackResponse(err)
|
return sfps2.Err2CallbackResponse(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if order.OrderVendorID == model.VendorIDDD {
|
switch order.OrderVendorID {
|
||||||
result := &mtpsapi.RiderInfo{
|
case model.VendorIDDD:
|
||||||
OrderId: order.VendorOrderID,
|
tiktokStatusPush(order, orderStatus)
|
||||||
ThirdCarrierOrderId: order.VendorOrderID,
|
case model.VendorIDTaoVegetable, model.VendorIDMTWM:
|
||||||
CourierName: order.CourierName,
|
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||||
CourierPhone: order.CourierMobile,
|
|
||||||
LogisticsProviderCode: "10002",
|
|
||||||
LogisticsStatus: order.Status,
|
|
||||||
OpCode: "",
|
|
||||||
}
|
|
||||||
switch orderStatus {
|
|
||||||
case sfps2.OrderStatusNewOrder:
|
|
||||||
result.LogisticsStatus = model.WaybillStatusNew
|
|
||||||
result.LogisticsContext = model.RiderWaitRider
|
|
||||||
case sfps2.OrderStatusTakeOrder:
|
|
||||||
result.LogisticsStatus = model.WaybillStatusCourierAssigned // 分配骑手
|
|
||||||
result.LogisticsContext = model.RiderWaitGetGoods
|
|
||||||
case sfps2.OrderStatusRiderArriving:
|
|
||||||
result.LogisticsStatus = model.WaybillStatusDelivering
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDelivering
|
|
||||||
case sfps2.OrderStatusFinished:
|
|
||||||
result.LogisticsStatus = model.WaybillStatusDelivered
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDelivered
|
|
||||||
case sfps2.OrderStatusOrderCancel, sfps2.OrderStatusRiderCancel:
|
|
||||||
result.LogisticsStatus = model.WaybillStatusCanceled
|
|
||||||
result.LogisticsContext = model.RiderGetOrderCanceled
|
|
||||||
case sfps2.OrderStatusError:
|
|
||||||
result.LogisticsStatus = model.WaybillStatusDeliverFailed
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDeliverFailed
|
|
||||||
case sfps2.OrderStatusArrivedStore:
|
|
||||||
result.LogisticsStatus = model.WaybillStatusCourierArrived
|
|
||||||
result.LogisticsContext = model.RiderToStore
|
|
||||||
default:
|
|
||||||
result.LogisticsStatus = 0
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
|
||||||
}
|
|
||||||
delivery.PullTiktokRiderInfo(result)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
defer delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
|
||||||
return sfps2.Err2CallbackResponse(nil)
|
return sfps2.Err2CallbackResponse(nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func tiktokStatusPush(order *model.Waybill, orderStatus int64) {
|
||||||
|
result := &mtpsapi.RiderInfo{
|
||||||
|
OrderId: order.VendorOrderID,
|
||||||
|
ThirdCarrierOrderId: order.VendorOrderID,
|
||||||
|
CourierName: order.CourierName,
|
||||||
|
CourierPhone: order.CourierMobile,
|
||||||
|
LogisticsProviderCode: "10002",
|
||||||
|
LogisticsStatus: order.Status,
|
||||||
|
OpCode: "",
|
||||||
|
}
|
||||||
|
switch orderStatus {
|
||||||
|
case sfps2.OrderStatusNewOrder:
|
||||||
|
result.LogisticsStatus = model.WaybillStatusNew
|
||||||
|
result.LogisticsContext = model.RiderWaitRider
|
||||||
|
case sfps2.OrderStatusTakeOrder:
|
||||||
|
result.LogisticsStatus = model.WaybillStatusCourierAssigned // 分配骑手
|
||||||
|
result.LogisticsContext = model.RiderWaitGetGoods
|
||||||
|
case sfps2.OrderStatusRiderArriving:
|
||||||
|
result.LogisticsStatus = model.WaybillStatusDelivering
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDelivering
|
||||||
|
case sfps2.OrderStatusFinished:
|
||||||
|
result.LogisticsStatus = model.WaybillStatusDelivered
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDelivered
|
||||||
|
case sfps2.OrderStatusOrderCancel, sfps2.OrderStatusRiderCancel:
|
||||||
|
result.LogisticsStatus = model.WaybillStatusCanceled
|
||||||
|
result.LogisticsContext = model.RiderGetOrderCanceled
|
||||||
|
case sfps2.OrderStatusError:
|
||||||
|
result.LogisticsStatus = model.WaybillStatusDeliverFailed
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDeliverFailed
|
||||||
|
case sfps2.OrderStatusArrivedStore:
|
||||||
|
result.LogisticsStatus = model.WaybillStatusCourierArrived
|
||||||
|
result.LogisticsContext = model.RiderToStore
|
||||||
|
default:
|
||||||
|
result.LogisticsStatus = 0
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
||||||
|
}
|
||||||
|
delivery.PullTiktokRiderInfo(result)
|
||||||
|
}
|
||||||
|
|
||||||
// OnWaybillExceptSF 异常报备
|
// OnWaybillExceptSF 异常报备
|
||||||
func OnWaybillExceptSF(msg *sfps2.RiderException) (retVal *sfps2.CallbackResponse) {
|
func OnWaybillExceptSF(msg *sfps2.RiderException) (retVal *sfps2.CallbackResponse) {
|
||||||
jxutils.CallMsgHandler(func() {
|
jxutils.CallMsgHandler(func() {
|
||||||
|
|||||||
@@ -381,48 +381,54 @@ func OnWaybillMsg(req *uuptapi.WaybillCallbackParam) (resp *uuptapi.CallbackResp
|
|||||||
return uuptapi.Err2CallbackResponse(err)
|
return uuptapi.Err2CallbackResponse(err)
|
||||||
}
|
}
|
||||||
//推送抖音
|
//推送抖音
|
||||||
if param.OrderVendorID == model.VendorIDDD {
|
switch param.OrderVendorID {
|
||||||
result := &mtpsapi.RiderInfo{
|
case model.VendorIDDD:
|
||||||
OrderId: param.VendorOrderID,
|
tiktokStatusPush(param, req.State)
|
||||||
ThirdCarrierOrderId: param.VendorOrderID,
|
case model.VendorIDMTWM, model.VendorIDTaoVegetable:
|
||||||
CourierName: param.CourierName,
|
delivery.GetOrderRiderInfoToPlatform(param.VendorOrderID, param.Status) // 骑手位置更新
|
||||||
CourierPhone: param.CourierMobile,
|
|
||||||
LogisticsProviderCode: "10002",
|
|
||||||
LogisticsStatus: param.Status,
|
|
||||||
OpCode: "",
|
|
||||||
}
|
|
||||||
switch req.State {
|
|
||||||
case uuptapi.StateConfirmSuccess: //下单成功
|
|
||||||
result.LogisticsStatus = model.WaybillStatusNew
|
|
||||||
result.LogisticsContext = model.RiderWaitRider
|
|
||||||
case uuptapi.StateRMGrabsOrder: //骑手已接单
|
|
||||||
result.LogisticsStatus = model.WaybillStatusCourierAssigned // 分配骑手
|
|
||||||
result.LogisticsContext = model.RiderWaitGetGoods
|
|
||||||
case uuptapi.StateArrivedStore: //骑手到店
|
|
||||||
result.LogisticsStatus = model.WaybillStatusCourierArrived
|
|
||||||
result.LogisticsContext = model.RiderToStore
|
|
||||||
case uuptapi.StatePickUp: //已取件
|
|
||||||
result.LogisticsStatus = model.WaybillStatusUuPickUp
|
|
||||||
result.LogisticsContext = model.RiderPickUp
|
|
||||||
case uuptapi.StateArrivedDestination: //到达取件人地址处
|
|
||||||
result.LogisticsStatus = model.WaybillStatusUuArrivedDestination
|
|
||||||
result.LogisticsContext = model.RiderArrivedDestination
|
|
||||||
case uuptapi.StateReceiverGetGoods: //取件人收货
|
|
||||||
result.LogisticsStatus = model.WaybillStatusDelivered
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDelivered
|
|
||||||
case uuptapi.StateOrderCancel: //运单取消
|
|
||||||
result.LogisticsStatus = model.WaybillStatusCanceled
|
|
||||||
result.LogisticsContext = model.RiderGetOrderCanceled
|
|
||||||
default:
|
|
||||||
result.LogisticsStatus = 0
|
|
||||||
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
|
||||||
}
|
|
||||||
delivery.PullTiktokRiderInfo(result)
|
|
||||||
}
|
}
|
||||||
defer delivery.GetOrderRiderInfoToPlatform(param.VendorOrderID, param.Status) // 骑手位置更新
|
|
||||||
return uuptapi.Err2CallbackResponse(nil)
|
return uuptapi.Err2CallbackResponse(nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func tiktokStatusPush(param *model.Waybill, orderStatus string) {
|
||||||
|
result := &mtpsapi.RiderInfo{
|
||||||
|
OrderId: param.VendorOrderID,
|
||||||
|
ThirdCarrierOrderId: param.VendorOrderID,
|
||||||
|
CourierName: param.CourierName,
|
||||||
|
CourierPhone: param.CourierMobile,
|
||||||
|
LogisticsProviderCode: "10002",
|
||||||
|
LogisticsStatus: param.Status,
|
||||||
|
OpCode: "",
|
||||||
|
}
|
||||||
|
switch orderStatus {
|
||||||
|
case uuptapi.StateConfirmSuccess: //下单成功
|
||||||
|
result.LogisticsStatus = model.WaybillStatusNew
|
||||||
|
result.LogisticsContext = model.RiderWaitRider
|
||||||
|
case uuptapi.StateRMGrabsOrder: //骑手已接单
|
||||||
|
result.LogisticsStatus = model.WaybillStatusCourierAssigned // 分配骑手
|
||||||
|
result.LogisticsContext = model.RiderWaitGetGoods
|
||||||
|
case uuptapi.StateArrivedStore: //骑手到店
|
||||||
|
result.LogisticsStatus = model.WaybillStatusCourierArrived
|
||||||
|
result.LogisticsContext = model.RiderToStore
|
||||||
|
case uuptapi.StatePickUp: //已取件
|
||||||
|
result.LogisticsStatus = model.WaybillStatusUuPickUp
|
||||||
|
result.LogisticsContext = model.RiderPickUp
|
||||||
|
case uuptapi.StateArrivedDestination: //到达取件人地址处
|
||||||
|
result.LogisticsStatus = model.WaybillStatusUuArrivedDestination
|
||||||
|
result.LogisticsContext = model.RiderArrivedDestination
|
||||||
|
case uuptapi.StateReceiverGetGoods: //取件人收货
|
||||||
|
result.LogisticsStatus = model.WaybillStatusDelivered
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDelivered
|
||||||
|
case uuptapi.StateOrderCancel: //运单取消
|
||||||
|
result.LogisticsStatus = model.WaybillStatusCanceled
|
||||||
|
result.LogisticsContext = model.RiderGetOrderCanceled
|
||||||
|
default:
|
||||||
|
result.LogisticsStatus = 0
|
||||||
|
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
||||||
|
}
|
||||||
|
delivery.PullTiktokRiderInfo(result)
|
||||||
|
}
|
||||||
|
|
||||||
//辅助函数
|
//辅助函数
|
||||||
func getReallyStoreID(storeID, jxStoreID int) int {
|
func getReallyStoreID(storeID, jxStoreID int) int {
|
||||||
if storeID == 0 && jxStoreID == 0 {
|
if storeID == 0 && jxStoreID == 0 {
|
||||||
|
|||||||
@@ -53,3 +53,13 @@ func GetOrderIDFromMap(orderMap map[string]interface{}) string {
|
|||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetAfsIDFromMap(orderMap map[string]interface{}) string {
|
||||||
|
if orderID := orderMap["refund_order_id"]; orderID != nil {
|
||||||
|
if tryOrderID, ok := orderID.(string); ok {
|
||||||
|
return tryOrderID
|
||||||
|
}
|
||||||
|
return utils.Int64ToStr(utils.MustInterface2Int64(orderID))
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ func (p *PurchaseHandler) OrderFinancialDetail2Refund(orderFinancial *model.Orde
|
|||||||
func (p *PurchaseHandler) AfsOrderDetail2Financial(orderData map[string]interface{}) (afsOrder *model.AfsOrder) {
|
func (p *PurchaseHandler) AfsOrderDetail2Financial(orderData map[string]interface{}) (afsOrder *model.AfsOrder) {
|
||||||
afsOrder = &model.AfsOrder{
|
afsOrder = &model.AfsOrder{
|
||||||
VendorID: model.VendorIDEBAI,
|
VendorID: model.VendorIDEBAI,
|
||||||
AfsOrderID: GetOrderIDFromMap(orderData),
|
AfsOrderID: GetAfsIDFromMap(orderData),
|
||||||
VendorOrderID: GetOrderIDFromMap(orderData),
|
VendorOrderID: GetOrderIDFromMap(orderData),
|
||||||
}
|
}
|
||||||
order, err := partner.CurOrderManager.LoadOrder(afsOrder.VendorOrderID, afsOrder.VendorID)
|
order, err := partner.CurOrderManager.LoadOrder(afsOrder.VendorOrderID, afsOrder.VendorID)
|
||||||
|
|||||||
@@ -72,8 +72,6 @@ func pay4OrderByTL(ctx *jxcontext.Context, order *model.GoodsOrder, payType int,
|
|||||||
err = api.TLpayAPI.CreateH5UnitorderOrder(param2)
|
err = api.TLpayAPI.CreateH5UnitorderOrder(param2)
|
||||||
} else {
|
} else {
|
||||||
result, err := api.TLpayAPI.CreateUnitorderOrder(param)
|
result, err := api.TLpayAPI.CreateUnitorderOrder(param)
|
||||||
globals.SugarLogger.Debugf("===============result: %s", utils.Format4Output(result, false))
|
|
||||||
globals.SugarLogger.Debugf("===============result: %s", utils.Format4Output(err, false))
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
var result2 tonglianpayapi.PayInfo
|
var result2 tonglianpayapi.PayInfo
|
||||||
json.Unmarshal([]byte(result.PayInfo), &result2)
|
json.Unmarshal([]byte(result.PayInfo), &result2)
|
||||||
|
|||||||
@@ -93,12 +93,8 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode, vendorOrderID, vendorStoreID s
|
|||||||
return order, result, err
|
return order, result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) getOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
|
|
||||||
return getAPI(vendorOrgCode, 0, vendorStoreID).OrderStatusAndPsInfo(param)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
|
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
|
||||||
return p.getOrderRider(vendorOrgCode, vendorStoreID, param)
|
return getAPI(vendorOrgCode, 0, vendorStoreID).OrderStatusAndPsInfo(param)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) GetOrder(vendorOrgCode, vendorOrderID, vendorStoreID string) (order *model.GoodsOrder, err error) {
|
func (p *PurchaseHandler) GetOrder(vendorOrgCode, vendorOrderID, vendorStoreID string) (order *model.GoodsOrder, err error) {
|
||||||
@@ -570,6 +566,7 @@ func (c *PurchaseHandler) SelfDeliverDelivering(order *model.GoodsOrder, userNam
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SelfDeliverDelivered 自配送订单送达
|
||||||
func (c *PurchaseHandler) SelfDeliverDelivered(order *model.GoodsOrder, userName string) (err error) {
|
func (c *PurchaseHandler) SelfDeliverDelivered(order *model.GoodsOrder, userName string) (err error) {
|
||||||
if globals.EnableMtwmStoreWrite {
|
if globals.EnableMtwmStoreWrite {
|
||||||
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").OrderArrived(utils.Str2Int64(order.VendorOrderID))
|
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").OrderArrived(utils.Str2Int64(order.VendorOrderID))
|
||||||
|
|||||||
@@ -744,6 +744,7 @@ func (p *PurchaseHandler) CancelActs(ctx *jxcontext.Context, vendorOrgCode strin
|
|||||||
return cancelOneShopAct(putils.GetFixDirectDownAct(vendorOrgCode, storeID, 0), vendorStoreID, putils.StoreSku2ActStoreSku(model.SyncFlagDeletedMask, vendorStoreID, storeSkuList))
|
return cancelOneShopAct(putils.GetFixDirectDownAct(vendorOrgCode, storeID, 0), vendorStoreID, putils.StoreSku2ActStoreSku(model.SyncFlagDeletedMask, vendorStoreID, storeSkuList))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateStoreSkusSpecTag 更新限购
|
||||||
func (p *PurchaseHandler) UpdateStoreSkusSpecTag(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) {
|
func (p *PurchaseHandler) UpdateStoreSkusSpecTag(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) {
|
||||||
var foodDataList = []map[string]interface{}{}
|
var foodDataList = []map[string]interface{}{}
|
||||||
for _, v := range storeSkuList {
|
for _, v := range storeSkuList {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package mtwm
|
package tao_vegetable
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||||
|
|||||||
@@ -1,73 +1,29 @@
|
|||||||
package mtwm
|
package tao_vegetable
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
|
||||||
"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/netprinter"
|
|
||||||
"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/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// 美团回调接口
|
// OnCallbackMsg 淘宝回调接口
|
||||||
func OnCallbackMsg(msg *mtwmapi.CallbackMsg, msgType string) (response *mtwmapi.CallbackResponse) {
|
func OnCallbackMsg(orderStatus, orderId string, msg interface{}) (response *tao_vegetable.CallBackResult) {
|
||||||
// 获取平台门店id
|
|
||||||
//_, err := dao.GetStoreDetailByVendorStoreID(dao.GetDB(), GetVendorStoreIDFromMsg(msg), model.VendorIDMTWM, GetVendorAppIdFromMsg(msg))
|
|
||||||
//if err != nil && strings.Contains(err.Error(), "no row found") {
|
|
||||||
// forwardOrderToGy(msg, msgType)
|
|
||||||
// return mtwmapi.SuccessResponse
|
|
||||||
//}
|
|
||||||
if CurPurchaseHandler != nil {
|
if CurPurchaseHandler != nil {
|
||||||
if msg.Cmd == mtwmapi.MsgTypeStoreStatusChanged || msg.Cmd == mtwmapi.MsgTypeStoreAuditStatusChanged {
|
jxutils.CallMsgHandler(func() {
|
||||||
response = CurPurchaseHandler.onStoreStatusChanged(msg)
|
response = CurPurchaseHandler.onOrderMsg(orderStatus, orderId, msg)
|
||||||
} else if msg.Cmd == mtwmapi.MsgTypePrivateNumberDowngrade {
|
}, jxutils.ComposeUniversalOrderID(orderId, model.VendorIDTaoVegetable))
|
||||||
response = CurPurchaseHandler.onNumberDowngrade(msg)
|
|
||||||
} else if msg.Cmd == mtwmapi.MsgTypeStoreBind {
|
|
||||||
// 门店授权发生变化 17,失去授权
|
|
||||||
vendorStoreID := msg.FormData.Get("app_poi_code")
|
|
||||||
storeDetail, _ := dao.GetStoreDetailByVendorStoreID(dao.GetDB(), vendorStoreID, model.VendorIDMTWM, "")
|
|
||||||
_, err := netprinter.PrintStoreStatus(jxcontext.AdminCtx, storeDetail, model.VendorIDMTWM, -9)
|
|
||||||
response = mtwmapi.Err2CallbackResponse(err, "")
|
|
||||||
} else {
|
|
||||||
if orderID := GetOrderIDFromMsg(msg); orderID != "" {
|
|
||||||
jxutils.CallMsgHandler(func() {
|
|
||||||
switch msg.Cmd {
|
|
||||||
case mtwmapi.MsgTypeWaybillStatus:
|
|
||||||
response = CurPurchaseHandler.onWaybillMsg(msg)
|
|
||||||
default:
|
|
||||||
response = CurPurchaseHandler.onOrderMsg(msg)
|
|
||||||
}
|
|
||||||
}, jxutils.ComposeUniversalOrderID(orderID, model.VendorIDMTWM))
|
|
||||||
}
|
|
||||||
/*if msg.Cmd == mtwmapi.MsgTypeOrderRefund || msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund {
|
|
||||||
utils.CallFuncAsync(func() {
|
|
||||||
OnFinancialMsg(msg)
|
|
||||||
})
|
|
||||||
} */
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return response
|
return response
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetOrderIDFromMsg(msg *mtwmapi.CallbackMsg) string {
|
func forwardOrderToGy(msg *mtwmapi.CallbackMsg, orderStatus string) {
|
||||||
return msg.FormData.Get(mtwmapi.KeyOrderID)
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetVendorStoreIDFromMsg(msg *mtwmapi.CallbackMsg) string {
|
|
||||||
return msg.FormData.Get(mtwmapi.KeyAppPoiCode)
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetVendorAppIdFromMsg(msg *mtwmapi.CallbackMsg) string {
|
|
||||||
return msg.FormData.Get(mtwmapi.KeyAppID)
|
|
||||||
}
|
|
||||||
|
|
||||||
func forwardOrderToGy(msg *mtwmapi.CallbackMsg, msgType string) {
|
|
||||||
cl := http.Client{}
|
cl := http.Client{}
|
||||||
callbackUrl := GetMsgCallBackUrl(msgType, msg.AppID)
|
callbackUrl := GetMsgCallBackUrl(orderStatus, msg.AppID)
|
||||||
request, err := http.NewRequest(http.MethodPost, "http://callback-jxgy.jxc4.com/mtwm/"+callbackUrl, strings.NewReader(msg.FormData.Encode()))
|
request, err := http.NewRequest(http.MethodPost, "http://callback-jxgy.jxc4.com/taoBaoVegetable/"+callbackUrl, strings.NewReader(msg.FormData.Encode()))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -78,40 +34,14 @@ func forwardOrderToGy(msg *mtwmapi.CallbackMsg, msgType string) {
|
|||||||
func GetMsgCallBackUrl(msgType, appId string) string {
|
func GetMsgCallBackUrl(msgType, appId string) string {
|
||||||
interfaceUrl := ""
|
interfaceUrl := ""
|
||||||
switch msgType {
|
switch msgType {
|
||||||
case mtwmapi.MsgTypeWaybillStatus:
|
case tao_vegetable.OrderStatusApplyAfs:
|
||||||
interfaceUrl = "/waybillStatus"
|
interfaceUrl = "/applyCancelOrder "
|
||||||
case mtwmapi.MsgTypeNewOrder:
|
case tao_vegetable.OrderStatusCancelAfs:
|
||||||
interfaceUrl = "/newOrder"
|
interfaceUrl = "/userCancelRefund"
|
||||||
case mtwmapi.MsgTypeOrderAccepted:
|
case tao_vegetable.OrderStatusOnSaleCancel:
|
||||||
interfaceUrl = "/orderAccepted"
|
interfaceUrl = "/cancelOnSaleRefundOrder"
|
||||||
case mtwmapi.MsgTypeOrderFinished:
|
|
||||||
interfaceUrl = "/orderFinished"
|
|
||||||
case mtwmapi.MsgTypeOrderFinancial:
|
|
||||||
interfaceUrl = "/orderFinancial"
|
|
||||||
case mtwmapi.MsgTypeOrderCanceled:
|
|
||||||
interfaceUrl = "/orderCanceled"
|
|
||||||
case mtwmapi.MsgTypeUserUrgeOrder:
|
|
||||||
interfaceUrl = "/userUrgeOrder"
|
|
||||||
case mtwmapi.MsgTypePrivateNumberDowngrade:
|
|
||||||
interfaceUrl = "/numberDowngrade"
|
|
||||||
case mtwmapi.MsgTypeOrderModified:
|
|
||||||
interfaceUrl = "/orderModified"
|
|
||||||
case mtwmapi.MsgTypeOrderRefund:
|
|
||||||
interfaceUrl = "/orderRefund"
|
|
||||||
case mtwmapi.MsgTypeOrderPartialRefund:
|
|
||||||
interfaceUrl = "/orderPartialRefund"
|
|
||||||
case mtwmapi.MsgTypeOrderFinishedPickup:
|
|
||||||
interfaceUrl = "/orderFinishedPickup"
|
|
||||||
case mtwmapi.MsgTypeStoreStatusChanged:
|
|
||||||
interfaceUrl = "/storeStatusChanged"
|
|
||||||
case mtwmapi.MsgTypeStoreAuditStatusChanged:
|
|
||||||
interfaceUrl = "/storeAuditStatusChanged"
|
|
||||||
case mtwmapi.MsgTypeSkuDelete:
|
|
||||||
interfaceUrl = "/skuDelete"
|
|
||||||
case mtwmapi.MsgTypeStoreBind:
|
|
||||||
interfaceUrl = "/storeBind"
|
|
||||||
default:
|
default:
|
||||||
globals.SugarLogger.Errorf("美团超市[app_id :=%s ,callbackUrl := %s ]回调推送到果园错误,回调地址不正确", appId, msgType)
|
globals.SugarLogger.Errorf("淘宝[app_id :=%s ,callbackUrl := %s ]回调推送到果园错误,回调地址不正确", appId, msgType)
|
||||||
}
|
}
|
||||||
return interfaceUrl
|
return interfaceUrl
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
package mtwm
|
package tao_vegetable
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||||
|
domain591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/domain"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
@@ -131,17 +133,16 @@ func (p *PurchaseHandler) AfsOrderDetail2Financial(orderData url.Values) (afsOrd
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 存储美团正向订单结账信息
|
// 存储美团正向订单结账信息
|
||||||
func (p *PurchaseHandler) OnOrderDetail(result map[string]interface{}, operation string) (err error) {
|
func (p *PurchaseHandler) OnOrderDetail(result *domain591.AlibabaAelophyOrderGetOrderResponse, operation string) (err error) {
|
||||||
err = partner.CurOrderManager.SaveOrderFinancialInfo(p.OrderDetail2Financial(result), operation)
|
err = partner.CurOrderManager.SaveOrderFinancialInfo(p.OrderDetail2Financial(result), operation)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) OrderDetail2Financial(result map[string]interface{}) (orderFinancial *model.OrderFinancial) {
|
func (p *PurchaseHandler) OrderDetail2Financial(result *domain591.AlibabaAelophyOrderGetOrderResponse) (orderFinancial *model.OrderFinancial) {
|
||||||
orderFinancial = &model.OrderFinancial{
|
orderFinancial = &model.OrderFinancial{
|
||||||
VendorID: model.VendorIDMTWM,
|
VendorID: model.VendorIDTaoVegetable,
|
||||||
VendorOrderID: utils.Int64ToStr(utils.MustInterface2Int64(result["order_id"])),
|
VendorOrderID: utils.Int64ToStr(*result.BizOrderId),
|
||||||
}
|
}
|
||||||
// orderFinancial.DeliveryConfirmTime = utils.Str2TimeWithDefault(utils.Interface2String(result["order_completed_time"]), utils.DefaultTimeValue)
|
|
||||||
order, err := partner.CurOrderManager.LoadOrder(orderFinancial.VendorOrderID, orderFinancial.VendorID)
|
order, err := partner.CurOrderManager.LoadOrder(orderFinancial.VendorOrderID, orderFinancial.VendorID)
|
||||||
jxStoreID := 0
|
jxStoreID := 0
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@@ -154,92 +155,58 @@ func (p *PurchaseHandler) OrderDetail2Financial(result map[string]interface{}) (
|
|||||||
} else {
|
} else {
|
||||||
err = nil
|
err = nil
|
||||||
}
|
}
|
||||||
if result["package_bag_money"] != nil {
|
|
||||||
orderFinancial.BoxMoney = utils.MustInterface2Int64(result["package_bag_money"])
|
// 订单
|
||||||
}
|
for _, x := range *result.SubOrderResponseList {
|
||||||
detail := result["detail"]
|
orderSkuFinancial := &model.OrderSkuFinancial{
|
||||||
if detail != nil {
|
VendorID: orderFinancial.VendorID,
|
||||||
var data []map[string]interface{}
|
VendorOrderID: orderFinancial.VendorOrderID,
|
||||||
utils.UnmarshalUseNumber([]byte(utils.Interface2String(detail)), &data)
|
VendorStoreID: *result.StoreId,
|
||||||
for _, x := range data {
|
StoreID: 0,
|
||||||
orderSkuFinancial := &model.OrderSkuFinancial{
|
JxStoreID: jxStoreID,
|
||||||
|
VendorSkuID: utils.Int64ToStr(utils.MustInterface2Int64(x.SkuCode)),
|
||||||
|
SkuID: utils.Str2Int(*x.SkuCode),
|
||||||
|
Name: utils.Interface2String(x.SkuName),
|
||||||
|
SalePrice: *x.Price,
|
||||||
|
Count: utils.Str2Int(*x.BuySaleQuantity),
|
||||||
|
SkuBoxMoney: 0,
|
||||||
|
IsAfsOrder: 0,
|
||||||
|
}
|
||||||
|
orderFinancial.Skus = append(orderFinancial.Skus, orderSkuFinancial)
|
||||||
|
orderFinancial.SalePriceMoney += orderSkuFinancial.SalePrice * int64(orderSkuFinancial.Count)
|
||||||
|
orderFinancial.SkuBoxMoney += orderSkuFinancial.SkuBoxMoney
|
||||||
|
|
||||||
|
// 活动
|
||||||
|
for _, v := range *x.Activitys {
|
||||||
|
activity := &model.OrderDiscountFinancial{
|
||||||
VendorID: orderFinancial.VendorID,
|
VendorID: orderFinancial.VendorID,
|
||||||
VendorOrderID: orderFinancial.VendorOrderID,
|
VendorOrderID: orderFinancial.VendorOrderID,
|
||||||
// OrderFinancialID: orderFinancial.VendorOrderID,
|
|
||||||
// ConfirmTime: utils.Str2TimeWithDefault(utils.Interface2String(result["ctime"]), utils.DefaultTimeValue),
|
|
||||||
VendorStoreID: result["app_poi_code"].(string),
|
|
||||||
StoreID: 0,
|
|
||||||
JxStoreID: jxStoreID,
|
|
||||||
VendorSkuID: utils.Interface2String(x["sku_id"]),
|
|
||||||
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(x["sku_id"]), 0)),
|
|
||||||
Name: utils.Interface2String(x["food_name"]),
|
|
||||||
SalePrice: jxutils.StandardPrice2Int(utils.MustInterface2Float64(x["price"])),
|
|
||||||
Count: int(utils.MustInterface2Int64(x["quantity"])),
|
|
||||||
SkuBoxMoney: jxutils.StandardPrice2Int(utils.MustInterface2Float64(x["box_price"])) * jxutils.StandardPrice2Int(utils.MustInterface2Float64(x["box_num"])),
|
|
||||||
IsAfsOrder: 0,
|
|
||||||
}
|
}
|
||||||
orderFinancial.Skus = append(orderFinancial.Skus, orderSkuFinancial)
|
if v.ChannelActivityId != nil {
|
||||||
orderFinancial.SalePriceMoney += orderSkuFinancial.SalePrice * int64(orderSkuFinancial.Count)
|
activity.VendorActivityID = *v.ChannelActivityId
|
||||||
orderFinancial.SkuBoxMoney += orderSkuFinancial.SkuBoxMoney
|
activity.Type = tao_vegetable.ActivityTypeChannel
|
||||||
}
|
|
||||||
} else {
|
|
||||||
globals.SugarLogger.Warnf("mtwm OrderDetail2Financial, orderID:%s have no detail", orderFinancial.VendorOrderID)
|
|
||||||
}
|
|
||||||
extras := result["extras"]
|
|
||||||
if extras != nil {
|
|
||||||
var data []map[string]interface{}
|
|
||||||
utils.UnmarshalUseNumber([]byte(utils.Interface2String(extras)), &data)
|
|
||||||
for _, x := range data {
|
|
||||||
if x["rider_fee"] == nil {
|
|
||||||
activity := &model.OrderDiscountFinancial{
|
|
||||||
VendorID: orderFinancial.VendorID,
|
|
||||||
VendorOrderID: orderFinancial.VendorOrderID,
|
|
||||||
// ActivityName: utils.Interface2String(x["remark"]),
|
|
||||||
// ActivityMoney: jxutils.StandardPrice2Int(utils.MustInterface2Float64(x["reduce_fee"])),
|
|
||||||
// VendorActivityID: utils.Int64ToStr(utils.MustInterface2Int64(x["act_detail_id"])),
|
|
||||||
}
|
|
||||||
if x["act_detail_id"] != nil { // 容错处理
|
|
||||||
activity.VendorActivityID = utils.Int64ToStr(utils.MustInterface2Int64(x["act_detail_id"]))
|
|
||||||
orderFinancial.Discounts = append(orderFinancial.Discounts, activity)
|
|
||||||
}
|
|
||||||
// 通过活动Id去取,京西活动补贴
|
|
||||||
// orderFinancial.JxSubsidyMoney +=
|
|
||||||
}
|
}
|
||||||
|
if v.BizActivityId != nil {
|
||||||
|
activity.VendorActivityID = *v.BizActivityId
|
||||||
|
activity.Type = tao_vegetable.ActivityTypeBiz
|
||||||
|
}
|
||||||
|
if v.MerchantActivityId != nil {
|
||||||
|
activity.VendorActivityID = *v.MerchantActivityId
|
||||||
|
activity.Type = tao_vegetable.ActivityTypeMerchant
|
||||||
|
}
|
||||||
|
orderFinancial.Discounts = append(orderFinancial.Discounts, activity)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
poiReceiveDetail := result["poi_receive_detail"]
|
|
||||||
if poiReceiveDetail != nil {
|
orderFinancial.ReceivableFreight = *result.PostFee
|
||||||
var data map[string]interface{}
|
orderFinancial.FreightMoney = 0
|
||||||
utils.UnmarshalUseNumber([]byte(utils.Interface2String(poiReceiveDetail)), &data)
|
orderFinancial.ActualPayMoney = *result.PayFee
|
||||||
orderFinancial.ReceivableFreight = utils.MustInterface2Int64(data["logisticsFee"])
|
orderFinancial.PmMoney = 0 // 平台费
|
||||||
orderFinancial.FreightMoney = utils.MustInterface2Int64(data["logisticsFee"])
|
orderFinancial.ShopMoney = 0 // 应结金额
|
||||||
orderFinancial.ActualPayMoney = utils.MustInterface2Int64(data["onlinePayment"])
|
orderFinancial.TotalDiscountMoney = *result.DiscountFee // 订单优惠总金额
|
||||||
orderFinancial.PmMoney = utils.MustInterface2Int64(data["foodShareFeeChargeByPoi"])
|
orderFinancial.PmSubsidyMoney = *result.PostDiscountPlatformFee // 平台活动补贴(订单主体活动补贴+订单单条sku补贴)1+
|
||||||
orderFinancial.ShopMoney = utils.MustInterface2Int64(data["wmPoiReceiveCent"])
|
orderFinancial.SelfDeliveryDiscountMoney = *result.SkuDiscountPlatformFee // 平台承担运费补贴(商家自送)+
|
||||||
for _, x := range data["actOrderChargeByMt"].([]interface{}) {
|
orderFinancial.DistanceFreightMoney = 0
|
||||||
orderFinancial.TotalDiscountMoney += utils.MustInterface2Int64(x.(map[string]interface{})["moneyCent"])
|
|
||||||
orderFinancial.PmSubsidyMoney += utils.MustInterface2Int64(x.(map[string]interface{})["moneyCent"])
|
|
||||||
}
|
|
||||||
for _, x := range data["actOrderChargeByPoi"].([]interface{}) {
|
|
||||||
orderFinancial.TotalDiscountMoney += utils.MustInterface2Int64(x.(map[string]interface{})["moneyCent"])
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
globals.SugarLogger.Warnf("mtwm OrderDetail2Financial, orderID:%s have no poi_receive_detail", orderFinancial.VendorOrderID)
|
|
||||||
}
|
|
||||||
if utils.MustInterface2Int64(result["is_third_shipping"]) == SelfDeliveryCarrierNo { // is_third_shipping int 是否是第三方配送平台配送,0表否,1表是)
|
|
||||||
orderFinancial.SelfDeliveryDiscountMoney = orderFinancial.ReceivableFreight
|
|
||||||
orderFinancial.DistanceFreightMoney = 0
|
|
||||||
// 通过本地数据库去取是否转美团/达达,并计算运费
|
|
||||||
// wayBill, err := partner.CurOrderManager.LoadWaybill(orderFinancial.VendorOrderID, orderFinancial.VendorID)
|
|
||||||
// if err == nil {
|
|
||||||
// orderFinancial.JxFreightMoney = wayBill.DesiredFee
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
// // 美团订单单独处理部分,美团正向订单接口推送时总结算金额没有计算公益捐款一分钱,是否在这里直接提前扣除?
|
|
||||||
// // 3/18之后的订单一直都不显示公益捐款金额,而且结算现在结算到了3/18之后的订单,没有的已经不计算了,先注释
|
|
||||||
// // 2019-04-03 10.52 询问赵mf, 此计划是必须参加的,而且是长期的,每单固定扣除一分钱
|
|
||||||
orderFinancial.DonationMoney = PublicWelfareDonation
|
|
||||||
// 不应该对第三方结账金额做更改,就算有异常,也要保留异常,知道问题出在哪里
|
|
||||||
// orderFinancial.ShopMoney -= PublicWelfareDonation
|
|
||||||
return orderFinancial
|
return orderFinancial
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,13 +1,12 @@
|
|||||||
package mtwm
|
package tao_vegetable
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.rosy.net.cn/jx-callback/globals/api"
|
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
|
||||||
"net/url"
|
request3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/request"
|
||||||
"strings"
|
domain591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/domain"
|
||||||
|
request591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/request"
|
||||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"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"
|
||||||
@@ -15,57 +14,39 @@ import (
|
|||||||
"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/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// AfsVendorStatus2StatusMap = map[int]int{
|
|
||||||
// mtwmapi.ResTypePending: model.AfsOrderStatusWait4Approve,
|
|
||||||
// mtwmapi.ResTypeMerchantRefused: model.AfsOrderStatusFailed,
|
|
||||||
// mtwmapi.ResTypeMerchantAgreed: model.AfsOrderStatusFinished,
|
|
||||||
// mtwmapi.ResTypeCSRefused: model.AfsOrderStatusFailed,
|
|
||||||
// mtwmapi.ResTypeCSAgreed: model.AfsOrderStatusFinished,
|
|
||||||
// mtwmapi.ResTypeTimeoutAutoAgreed: model.AfsOrderStatusFinished,
|
|
||||||
// mtwmapi.ResTypeAutoAgreed: model.AfsOrderStatusFinished,
|
|
||||||
// mtwmapi.ResTypeUserCancelApply: model.AfsOrderStatusFailed,
|
|
||||||
// mtwmapi.ResTypeUserCancelComplain: model.AfsOrderStatusFailed,
|
|
||||||
// }
|
|
||||||
AfsVendorStatus2StatusMap = map[string]int{
|
AfsVendorStatus2StatusMap = map[string]int{
|
||||||
mtwmapi.NotifyTypeApply: model.AfsOrderStatusWait4Approve,
|
tao_vegetable.OrderStatusApplyAfs: model.AfsOrderStatusWait4Approve,
|
||||||
mtwmapi.NotifyTypePartyApply: model.AfsOrderStatusWait4Approve,
|
tao_vegetable.OrderStatusCancelAfs: model.AfsOrderStatusCancelAfs,
|
||||||
mtwmapi.NotifyTypeSuccess: model.AfsOrderStatusFinished,
|
tao_vegetable.OrderStatusRefundSuccess: model.AfsOrderStatusFinished,
|
||||||
mtwmapi.NotifyTypeReject: model.AfsOrderStatusFailed,
|
|
||||||
mtwmapi.NotifyTypeCancelRefund: model.AfsOrderStatusFailed,
|
|
||||||
mtwmapi.NotifyTypeCancelRefundComplaint: model.AfsOrderStatusFailed,
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *PurchaseHandler) isAfsMsg(msg *mtwmapi.CallbackMsg) bool {
|
func (c *PurchaseHandler) isAfsMsg(orderStatus string, orderId string) bool {
|
||||||
if msg.Cmd == mtwmapi.MsgTypeOrderRefund || msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund {
|
if orderStatus == tao_vegetable.OrderStatusApplyAfs || orderStatus == tao_vegetable.OrderStatusCancelAfs || orderStatus == tao_vegetable.OrderStatusRefundSuccess {
|
||||||
// refundData := msg.Data.(*mtwmapi.CallbackRefundInfo)
|
order, _ := partner.CurOrderManager.LoadOrder(orderId, model.VendorIDTaoVegetable)
|
||||||
orderID := utils.Str2Int64(GetOrderIDFromMsg(msg))
|
|
||||||
order, _ := partner.CurOrderManager.LoadOrder(utils.Int64ToStr(orderID), model.VendorIDMTWM)
|
|
||||||
if order != nil {
|
if order != nil {
|
||||||
//status, err := getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), order.VendorStoreID).OrderViewStatus(orderID)
|
return true
|
||||||
//if err == nil {
|
|
||||||
//return utils.Int2Str(status) == mtwmapi.OrderStatusFinished
|
|
||||||
return true //TODO 有的美团订单售前退款,也当做售后处理试试
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *PurchaseHandler) OnAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwmapi.CallbackResponse) {
|
func (c *PurchaseHandler) OnAfsOrderMsg(orderId, status string, msg interface{}) (retVal *tao_vegetable.CallBackResult) {
|
||||||
jxutils.CallMsgHandlerAsync(func() {
|
jxutils.CallMsgHandlerAsync(func() {
|
||||||
retVal = c.onAfsOrderMsg(msg)
|
retVal = c.onAfsOrderMsg(status, msg)
|
||||||
}, jxutils.ComposeUniversalOrderID(GetOrderIDFromMsg(msg), model.VendorIDMTWM))
|
}, jxutils.ComposeUniversalOrderID(orderId, model.VendorIDTaoVegetable))
|
||||||
return retVal
|
return retVal
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo 对于退款与部分退款,order.go与这个文件中对于状态的处理不一致
|
// todo 淘宝暂无部分退款,只有整单退款
|
||||||
func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwmapi.CallbackResponse) {
|
func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal *tao_vegetable.CallBackResult) {
|
||||||
var err error
|
var err error
|
||||||
orderStatus := c.callbackAfsMsg2Status(msg)
|
var db = dao.GetDB()
|
||||||
|
orderStatus := c.callbackAfsMsg2Status(status, msg)
|
||||||
needCallNew := orderStatus.Status == model.AfsOrderStatusWait4Approve || orderStatus.Status == model.AfsOrderStatusNew
|
needCallNew := orderStatus.Status == model.AfsOrderStatusWait4Approve || orderStatus.Status == model.AfsOrderStatusNew
|
||||||
if !needCallNew {
|
if !needCallNew {
|
||||||
_, err := partner.CurOrderManager.LoadAfsOrder(orderStatus.VendorOrderID, orderStatus.VendorID)
|
_, err := partner.CurOrderManager.LoadAfsOrder(orderStatus.VendorOrderID, orderStatus.VendorID)
|
||||||
@@ -73,73 +54,80 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwma
|
|||||||
if dao.IsNoRowsError(err) {
|
if dao.IsNoRowsError(err) {
|
||||||
needCallNew = true
|
needCallNew = true
|
||||||
} else {
|
} else {
|
||||||
return mtwmapi.Err2CallbackResponse(err, "")
|
return tao_vegetable.CallBackResultInfo(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if needCallNew {
|
if needCallNew {
|
||||||
|
refundData := msg.(*tao_vegetable.UserApplyRefundCallBack)
|
||||||
var afsOrder *model.AfsOrder
|
var afsOrder *model.AfsOrder
|
||||||
refundData := msg.Data.(*mtwmapi.CallbackRefundInfo)
|
afsOrder = &model.AfsOrder{
|
||||||
if msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund {
|
VendorID: model.VendorIDTaoVegetable,
|
||||||
afsOrder = &model.AfsOrder{
|
AfsOrderID: orderStatus.VendorOrderID,
|
||||||
VendorID: model.VendorIDMTWM,
|
VendorOrderID: orderStatus.RefVendorOrderID,
|
||||||
AfsOrderID: orderStatus.VendorOrderID,
|
VendorStoreID: refundData.StoreId,
|
||||||
VendorOrderID: orderStatus.RefVendorOrderID,
|
StoreID: 0,
|
||||||
VendorStoreID: "",
|
AfsCreatedAt: orderStatus.StatusTime,
|
||||||
StoreID: 0,
|
|
||||||
AfsCreatedAt: utils.Timestamp2Time(refundData.Timestamp),
|
|
||||||
VendorAppealType: "",
|
|
||||||
AppealType: model.AfsAppealTypeRefund,
|
|
||||||
VendorReasonType: "",
|
|
||||||
ReasonType: model.AfsReasonNotOthers,
|
|
||||||
ReasonDesc: utils.LimitUTF8StringLen(refundData.Reason, 1024),
|
|
||||||
ReasonImgList: utils.LimitUTF8StringLen(strings.Join(refundData.PictureList, ","), 1024),
|
|
||||||
RefundType: model.AfsTypePartRefund,
|
|
||||||
|
|
||||||
VendorOrgCode: msg.AppID,
|
VendorAppealType: status, // 原始售后方式
|
||||||
// FreightUserMoney: afsInfo.OrderFreightMoney,
|
AppealType: model.AfsAppealTypeUserCancel, // 淘宝这个接口下发的只有用户取消
|
||||||
// AfsFreightMoney: afsInfo.AfsFreight,
|
VendorReasonType: refundData.RefundReason,
|
||||||
// BoxMoney: afsInfo.PackagingMoney,
|
ReasonType: 0,
|
||||||
// TongchengFreightMoney: afsInfo.TongchengFreightMoney,
|
ReasonDesc: refundData.RefundReason,
|
||||||
// SkuBoxMoney: afsInfo.MealBoxMoney,
|
ReasonImgList: utils.LimitUTF8StringLen(refundData.RefundPictures, 1024),
|
||||||
}
|
RefundType: model.AfsTypeFullRefund,
|
||||||
for _, sku := range refundData.FoodList {
|
VendorOrgCode: refundData.MerchantCode,
|
||||||
orderSku := &model.OrderSkuFinancial{
|
}
|
||||||
// VendorID: model.VendorIDMTWM,
|
|
||||||
AfsOrderID: afsOrder.AfsOrderID,
|
|
||||||
// VendorOrderID: afsOrder.VendorOrderID,
|
|
||||||
// VendorStoreID: afsOrder.VendorStoreID,
|
|
||||||
// StoreID: afsOrder.StoreID,
|
|
||||||
IsAfsOrder: 1,
|
|
||||||
|
|
||||||
Count: sku.Count,
|
refundIds := make([]int64, 0, 0)
|
||||||
// ConfirmTime: afsOrder.AfsCreateAt,
|
bizOrderIds := make([]int64, len(refundData.SubRefundOrders))
|
||||||
VendorSkuID: sku.SkuID,
|
for _, v := range refundData.SubRefundOrders {
|
||||||
SkuID: int(utils.Str2Int64WithDefault(sku.SkuID, 0)),
|
bizOrderIds = append(bizOrderIds, utils.Str2Int64(v.OutSubOrderId))
|
||||||
Name: sku.FoodName,
|
}
|
||||||
UserMoney: jxutils.StandardPrice2Int(sku.RefundPrice)*int64(sku.Count) + jxutils.StandardPrice2Int(sku.BoxPrice)*int64(sku.BoxNum),
|
refundIds = append(refundIds, utils.Str2Int64(refundData.BizRefundId))
|
||||||
}
|
|
||||||
if orderSku.VendorSkuID == "" || orderSku.VendorSkuID == "0" {
|
|
||||||
orderSku.VendorSkuID = sku.AppFoodCode
|
|
||||||
}
|
|
||||||
|
|
||||||
afsOrder.SkuUserMoney += orderSku.UserMoney
|
taoAfsOrderDetail, err := getAPI(refundData.MerchantCode, 0, "").QueryAfsOrderDetail(&request591.AlibabaWdkOrderRefundGetRequest{
|
||||||
afsOrder.Skus = append(afsOrder.Skus, orderSku)
|
BizOrderIds: &bizOrderIds,
|
||||||
}
|
RefundIds: &refundIds,
|
||||||
//afsOrder.PmSubsidyMoney += afsOrder.RefundMoney - afsOrder.SkuUserMoney
|
OrderFrom: nil,
|
||||||
} else {
|
ShopId: nil,
|
||||||
if afsOrder = c.createAfsOrder(msg.FormData); afsOrder != nil {
|
StoreId: &refundData.StoreId,
|
||||||
// if orderFinancial, err2 := partner.CurOrderManager.LoadOrderFinancial(orderStatus.RefVendorOrderID, model.VendorIDMTWM); err2 == nil {
|
})
|
||||||
// afsOrder = c.OrderFinancialDetail2Refund(orderFinancial, msg.FormData)
|
if err != nil {
|
||||||
afsOrder.AfsOrderID = orderStatus.VendorOrderID
|
return tao_vegetable.CallBackResultInfo(err)
|
||||||
afsOrder.RefundType = model.AfsTypeFullRefund
|
}
|
||||||
afsOrder.AppealType = model.AfsAppealTypeRefund
|
|
||||||
afsOrder.VendorReasonType = ""
|
taoAfsOrder := *taoAfsOrderDetail.Orders
|
||||||
afsOrder.ReasonType = model.AfsReasonNotOthers
|
|
||||||
afsOrder.ReasonDesc = utils.LimitUTF8StringLen(refundData.Reason, 1024)
|
afsOrder.FreightUserMoney = *taoAfsOrder[0].RefundPostFee
|
||||||
afsOrder.ReasonImgList = utils.LimitUTF8StringLen(strings.Join(refundData.PictureList, ","), 1024)
|
afsOrder.AfsFreightMoney = *taoAfsOrder[0].RefundPostFee // 暂时未发现退货取件费用
|
||||||
|
afsOrder.BoxMoney = 0 // 餐盒费
|
||||||
|
afsOrder.TongchengFreightMoney = 0 // 同城配送费
|
||||||
|
afsOrder.SkuBoxMoney = 0 // 商品包装费
|
||||||
|
afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态
|
||||||
|
|
||||||
|
// 订单商品详细信息
|
||||||
|
skuList, err := getAPI(refundData.MerchantCode, 0, "").QueryOrderDetail(&request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
|
||||||
|
StoreId: utils.String2Pointer(refundData.StoreId),
|
||||||
|
BizOrderId: utils.Int64ToPointer(utils.Str2Int64(refundData.OutOrderId)),
|
||||||
|
}})
|
||||||
|
if err != nil {
|
||||||
|
return tao_vegetable.CallBackResultInfo(err)
|
||||||
|
}
|
||||||
|
for _, sku := range *skuList.SubOrderResponseList {
|
||||||
|
orderSku := &model.OrderSkuFinancial{
|
||||||
|
Count: utils.Str2Int(*sku.BuySaleQuantity),
|
||||||
|
VendorSkuID: *sku.SkuCode,
|
||||||
|
SkuID: utils.Str2Int(*sku.SkuCode),
|
||||||
|
Name: *sku.SkuName,
|
||||||
|
UserMoney: *sku.OriginalFee - *sku.DiscountFee,
|
||||||
|
PmSkuSubsidyMoney: *sku.DiscountPlatformFee, // 平台补贴商品
|
||||||
}
|
}
|
||||||
|
|
||||||
|
afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney
|
||||||
|
afsOrder.SkuUserMoney += orderSku.UserMoney
|
||||||
|
afsOrder.Skus = append(afsOrder.Skus, orderSku)
|
||||||
}
|
}
|
||||||
if afsOrder != nil {
|
if afsOrder != nil {
|
||||||
//直接就来一个新的售后单,并且还是售后完成的
|
//直接就来一个新的售后单,并且还是售后完成的
|
||||||
@@ -149,70 +137,132 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwma
|
|||||||
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
|
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// 用户取消售后
|
||||||
|
if status == tao_vegetable.OrderStatusCancelAfs {
|
||||||
|
// 删除售后单
|
||||||
|
afsOrder, err := dao.GetAfsOrders(db, model.VendorIDTaoVegetable, orderStatus.RefVendorOrderID, orderStatus.VendorOrderID)
|
||||||
|
if err != nil || afsOrder == nil {
|
||||||
|
globals.SugarLogger.Debugf("用户取消售后单,获取之前生成的售后单失败")
|
||||||
|
return tao_vegetable.CallBackResultInfo(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = utils.CallFuncLogError(func() error {
|
||||||
|
_, err = dao.DeleteEntity(db, afsOrder[0], "VendorOrderID", "VendorID")
|
||||||
|
return err
|
||||||
|
}, "SaveAfsOrder delete AfsOrder, afsOrderID:%s", afsOrder[0].AfsOrderID); err != nil {
|
||||||
|
return tao_vegetable.CallBackResultInfo(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除售后商品
|
||||||
|
if err = utils.CallFuncLogError(func() error {
|
||||||
|
_, err = dao.DeleteEntity(db, &model.OrderSkuFinancial{
|
||||||
|
VendorOrderID: afsOrder[0].VendorOrderID,
|
||||||
|
VendorID: afsOrder[0].VendorID,
|
||||||
|
IsAfsOrder: 1,
|
||||||
|
}, "VendorOrderID", "VendorID", "IsAfsOrder")
|
||||||
|
return err
|
||||||
|
}, "SaveAfsOrder delete OrderSkuFinancial, afsOrderID:%s", afsOrder[0].AfsOrderID); err != nil {
|
||||||
|
return tao_vegetable.CallBackResultInfo(err)
|
||||||
|
}
|
||||||
|
// 订单更改为待配送
|
||||||
|
goodsOrder, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, model.VendorIDTaoVegetable)
|
||||||
|
goodsOrder.Status = model.OrderStatusFinishedPickup
|
||||||
|
goodsOrder.VendorStatus = status
|
||||||
|
dao.UpdateEntity(db, goodsOrder, "Status", "VendorStatus")
|
||||||
|
}
|
||||||
|
|
||||||
if err := partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus); err == nil {
|
if err := partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus); err == nil {
|
||||||
// 订单回调全额退款接口时,将订单状态修改为取消
|
if err == nil && status == tao_vegetable.OrderStatusRefundSuccess {
|
||||||
refundData := msg.Data.(*mtwmapi.CallbackRefundInfo)
|
goodsOrder, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, orderStatus.VendorID)
|
||||||
if refundData.NotifyType == "agree" && msg.Cmd == mtwmapi.MsgTypeOrderRefund {
|
goodsOrder.Status = model.OrderStatusCanceled
|
||||||
order, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, model.VendorIDMTWM)
|
goodsOrder.VendorStatus = orderStatus.VendorStatus
|
||||||
order.Status = model.OrderStatusCanceled
|
dao.UpdateEntity(db, goodsOrder, "Status", "VendorStatus")
|
||||||
dao.UpdateEntity(dao.GetDB(), order, "Status")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return mtwmapi.Err2CallbackResponse(err, "")
|
return tao_vegetable.CallBackResultInfo(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) createAfsOrder(orderData url.Values) (afsOrder *model.AfsOrder) {
|
func (c *PurchaseHandler) callbackAfsMsg2Status(status string, msg interface{}) (orderStatus *model.OrderStatus) {
|
||||||
afsOrder, err := partner.CurOrderManager.CreateAfsOrderFromOrder(orderData.Get("order_id"), model.VendorIDMTWM)
|
|
||||||
if err == nil {
|
|
||||||
afsOrder.AfsOrderID = orderData.Get("refund_id")
|
|
||||||
afsOrder.AfsCreatedAt = utils.Timestamp2Time(utils.Str2Int64(orderData.Get("timestamp")))
|
|
||||||
if afsOrder.AfsOrderID == "" {
|
|
||||||
afsOrder.AfsOrderID = afsOrder.VendorOrderID
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
afsOrder = nil
|
|
||||||
}
|
|
||||||
return afsOrder
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *PurchaseHandler) callbackAfsMsg2Status(msg *mtwmapi.CallbackMsg) (orderStatus *model.OrderStatus) {
|
|
||||||
refundData := msg.Data.(*mtwmapi.CallbackRefundInfo)
|
|
||||||
orderStatus = &model.OrderStatus{
|
orderStatus = &model.OrderStatus{
|
||||||
VendorID: model.VendorIDMTWM,
|
VendorID: model.VendorIDTaoVegetable,
|
||||||
OrderType: model.OrderTypeAfsOrder,
|
OrderType: model.OrderTypeAfsOrder,
|
||||||
RefVendorOrderID: utils.Int64ToStr(refundData.OrderID),
|
RefVendorID: model.VendorIDTaoVegetable,
|
||||||
RefVendorID: model.VendorIDMTWM,
|
|
||||||
VendorStatus: fmt.Sprintf("%s:%d", refundData.NotifyType, refundData.ResType),
|
|
||||||
Status: c.GetAfsStatusFromVendorStatus(refundData.ResType, refundData.NotifyType),
|
|
||||||
StatusTime: utils.Timestamp2Time(refundData.Timestamp),
|
|
||||||
Remark: refundData.Reason,
|
|
||||||
}
|
}
|
||||||
if refundData.RefundID > 0 {
|
|
||||||
orderStatus.VendorOrderID = utils.Int64ToStr(refundData.RefundID)
|
switch status {
|
||||||
} else {
|
case tao_vegetable.OrderStatusApplyAfs:
|
||||||
|
refundData := msg.(*tao_vegetable.UserApplyRefundCallBack)
|
||||||
|
orderStatus.RefVendorOrderID = refundData.OutOrderId
|
||||||
|
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusApplyAfs, "用户申请取消")
|
||||||
|
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusApplyAfs)
|
||||||
|
orderStatus.StatusTime = utils.Str2Time(refundData.Timestamp)
|
||||||
|
orderStatus.Remark = refundData.Remarks
|
||||||
|
orderStatus.VendorOrderID = refundData.BizRefundId
|
||||||
|
case tao_vegetable.OrderStatusCancelAfs:
|
||||||
|
refundData := msg.(*tao_vegetable.UserCancelRefundApply)
|
||||||
|
orderStatus.RefVendorOrderID = refundData.OutOrderId
|
||||||
|
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusCancelAfs, "用户取消售后申请")
|
||||||
|
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusCancelAfs)
|
||||||
|
orderStatus.StatusTime = utils.Str2Time(refundData.Timestamp)
|
||||||
|
orderStatus.VendorOrderID = refundData.BizRefundId
|
||||||
|
//case tao_vegetable.OrderStatusOnSaleCancel:
|
||||||
|
// refundData := msg.(*tao_vegetable.OnSaleCancel)
|
||||||
|
// orderStatus.RefVendorOrderID = utils.Int64ToStr(refundData.BizOrderId)
|
||||||
|
// orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusOnSaleCancel, "用户售中取消")
|
||||||
|
// orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusOnSaleCancel)
|
||||||
|
// orderStatus.StatusTime = utils.Str2Time(refundData.Timestamp)
|
||||||
|
// orderStatus.VendorOrderID = refundData.IdempotentId
|
||||||
|
case tao_vegetable.OrderStatusRefundSuccess:
|
||||||
|
refundData := msg.(*tao_vegetable.RefundOrderFinish)
|
||||||
|
orderStatus.RefVendorOrderID = refundData.OutMainRefundId
|
||||||
|
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusRefundSuccess, "用户售后退款成功")
|
||||||
|
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusRefundSuccess)
|
||||||
|
orderStatus.StatusTime = utils.Str2Time(refundData.Timestamp)
|
||||||
|
orderStatus.VendorOrderID = refundData.BizSubRefundId
|
||||||
|
}
|
||||||
|
|
||||||
|
if orderStatus.VendorOrderID == "" {
|
||||||
orderStatus.VendorOrderID = orderStatus.RefVendorOrderID
|
orderStatus.VendorOrderID = orderStatus.RefVendorOrderID
|
||||||
}
|
}
|
||||||
return orderStatus
|
return orderStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *PurchaseHandler) GetAfsStatusFromVendorStatus(resType int, notifyType string) int {
|
func (c *PurchaseHandler) GetAfsStatusFromVendorStatus(notifyType string) int {
|
||||||
status := AfsVendorStatus2StatusMap[notifyType]
|
status := AfsVendorStatus2StatusMap[notifyType]
|
||||||
if status == model.AfsOrderStatusWait4Approve && resType != mtwmapi.ResTypePending {
|
//if status == model.AfsOrderStatusWait4Approve || status == model.AfsOrderStatusOnSaleAfs {
|
||||||
status = model.AfsOrderStatusNew
|
// status = model.AfsOrderStatusNew
|
||||||
}
|
//}
|
||||||
return status
|
return status
|
||||||
}
|
}
|
||||||
|
|
||||||
// 审核售后单申请
|
// 审核售后单申请
|
||||||
func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *model.AfsOrder, approveType int, reason string) (err error) {
|
func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *model.AfsOrder, approveType int, reason string) (err error) {
|
||||||
if globals.EnableMtwmStoreWrite {
|
if approveType == partner.AfsApproveTypeRefused {
|
||||||
if approveType == partner.AfsApproveTypeRefused {
|
param := &request3156.AlibabaTclsAelophyRefundAgreeRequest{
|
||||||
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromAfsOrder(order), order.VendorStoreID).OrderRefundReject(utils.Str2Int64(order.VendorOrderID), reason)
|
StoreId: utils.String2Pointer(order.VendorStoreID),
|
||||||
} else if approveType == partner.AfsApproveTypeRefusedToRefundMoney {
|
OutOrderId: utils.String2Pointer(order.VendorOrderID),
|
||||||
return errors.New("此平台暂时不支持")
|
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)),
|
||||||
} else {
|
}
|
||||||
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromAfsOrder(order), order.VendorStoreID).OrderRefundAgree(utils.Str2Int64(order.VendorOrderID), reason)
|
param.AuditMemo = utils.String2Pointer(fmt.Sprintf("商户同意退款"))
|
||||||
|
if reason != "" {
|
||||||
|
param.AuditMemo = utils.String2Pointer(*param.AuditMemo + fmt.Sprintf(",%s", reason))
|
||||||
|
}
|
||||||
|
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromAfsOrder(order), order.VendorStoreID).AgreeUserCancel(param)
|
||||||
|
} else if approveType == partner.AfsApproveTypeRefusedToRefundMoney {
|
||||||
|
return errors.New("此平台暂时不支持")
|
||||||
|
} else {
|
||||||
|
param := &request3156.AlibabaTclsAelophyRefundDisagreeRequest{
|
||||||
|
RefundId: utils.String2Pointer(order.AfsOrderID),
|
||||||
|
RejectReason: utils.String2Pointer(reason),
|
||||||
|
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)),
|
||||||
|
}
|
||||||
|
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromAfsOrder(order), order.VendorStoreID).DisAgreeUserCancel(param)
|
||||||
|
if err != nil {
|
||||||
|
order.Status = model.AfsOrderStatusFailed
|
||||||
|
order.VendorStatus = "老板拒绝"
|
||||||
|
order.ReasonDesc += reason + ","
|
||||||
|
dao.UpdateEntity(dao.GetDB(), order, "Status", "ReasonDesc", "VendorStatus")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package mtwm
|
package tao_vegetable
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package mtwm
|
package tao_vegetable
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|||||||
199
business/partner/purchase/tao_vegetable/order_utils.go
Normal file
199
business/partner/purchase/tao_vegetable/order_utils.go
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
package tao_vegetable
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
|
||||||
|
domain3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/domain"
|
||||||
|
request3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/request"
|
||||||
|
domain591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/domain"
|
||||||
|
request591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/request"
|
||||||
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
|
"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"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// orderStatusChangeNotice 拣货和通知发货状态变化接口
|
||||||
|
func orderStatusChangeNotice(order *model.GoodsOrder, orderStatus string) (*request591.AlibabaAelophyOrderWorkCallbackRequest, error) {
|
||||||
|
param := &request591.AlibabaAelophyOrderWorkCallbackRequest{}
|
||||||
|
param.WorkCallbackRequest = &domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackRequest{
|
||||||
|
StoreId: utils.String2Pointer(order.VendorStoreID),
|
||||||
|
BizOrderId: utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)),
|
||||||
|
Status: utils.String2Pointer(orderStatus),
|
||||||
|
}
|
||||||
|
|
||||||
|
workCallbackSubOrderInfoList := make([]domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackSubOrderInfo, 0, 0)
|
||||||
|
skuList, err := dao.GetSimpleOrderSkus(dao.GetDB(), order.VendorOrderID, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(skuList) == model.NO {
|
||||||
|
return nil, fmt.Errorf("订单商品列表为零,请管理员检查")
|
||||||
|
}
|
||||||
|
for _, v := range skuList {
|
||||||
|
workCallbackSubOrderInfo := domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackSubOrderInfo{
|
||||||
|
BizSubOrderId: nil,
|
||||||
|
SkuCode: utils.String2Pointer(v.VendorSkuID),
|
||||||
|
PickSaleQuantity: utils.String2Pointer(utils.Int2Str(v.Count)),
|
||||||
|
PickStockQuantity: utils.String2Pointer(fmt.Sprintf("%.2f", float64(v.Weight)/float64(1000)*float64(v.Count))),
|
||||||
|
}
|
||||||
|
workCallbackSubOrderInfoList = append(workCallbackSubOrderInfoList, workCallbackSubOrderInfo)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 出库
|
||||||
|
param.WorkCallbackRequest.WorkCallbackSubOrderInfoList = &workCallbackSubOrderInfoList
|
||||||
|
|
||||||
|
return param, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// OrderStatusChangeDelivery 订单开始配送和送达通知接口
|
||||||
|
func OrderStatusChangeDelivery(order *model.GoodsOrder, orderStatus string) *request591.AlibabaAelophyOrderWorkCallbackRequest {
|
||||||
|
param := &request591.AlibabaAelophyOrderWorkCallbackRequest{}
|
||||||
|
param.WorkCallbackRequest = &domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackRequest{
|
||||||
|
StoreId: utils.String2Pointer(order.VendorStoreID),
|
||||||
|
BizOrderId: utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)),
|
||||||
|
Status: utils.String2Pointer(orderStatus),
|
||||||
|
}
|
||||||
|
bill, _ := partner.CurOrderManager.LoadWaybill(order.VendorWaybillID, order.WaybillVendorID)
|
||||||
|
param.WorkCallbackRequest.DelivererName = utils.String2Pointer(bill.CourierName)
|
||||||
|
param.WorkCallbackRequest.DelivererPhone = utils.String2Pointer(bill.CourierMobile)
|
||||||
|
if param.WorkCallbackRequest.DelivererName == nil || param.WorkCallbackRequest.DelivererPhone == nil {
|
||||||
|
param.WorkCallbackRequest.DelivererName = utils.String2Pointer("暂无")
|
||||||
|
param.WorkCallbackRequest.DelivererPhone = utils.String2Pointer("暂无")
|
||||||
|
}
|
||||||
|
|
||||||
|
return param
|
||||||
|
}
|
||||||
|
|
||||||
|
// getOrderCancelList 获取订单可取消的订单列表
|
||||||
|
func getOrderCancelList(api *tao_vegetable.API, order *model.GoodsOrder) (*domain3156.AlibabaTclsAelophyRefundCsapplyrenderRefundCsApplyRenderResponseDto, error) {
|
||||||
|
param := &request3156.AlibabaTclsAelophyRefundCsapplyrenderRequest{
|
||||||
|
RefundCsApplyRenderDTO: &domain3156.AlibabaTclsAelophyRefundCsapplyrenderRefundCsApplyRenderDto{
|
||||||
|
OutOrderId: utils.String2Pointer(order.VendorOrderID),
|
||||||
|
StoreId: utils.String2Pointer(order.VendorStoreID),
|
||||||
|
OutSubOrderIds: nil,
|
||||||
|
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return api.PartialRefundReason(param)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getTimeFromTimestamp(timeStamp int64) time.Time {
|
||||||
|
if timeStamp < 1538103149 { // 立即达订单给的是1(而不是空,0),1538103149不是特殊值,只是一个任意之前的时间,这样写可以处理
|
||||||
|
return utils.DefaultTimeValue
|
||||||
|
}
|
||||||
|
return utils.Timestamp2Time(timeStamp)
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//func (p *PurchaseHandler) GetOrderConsigneeNumber(ctx *jxcontext.Context, storeID int, vendorStoreID string) (numberList []*partner.OrderPhoneNumberInfo, err error) {
|
||||||
|
// offset := 0
|
||||||
|
// for {
|
||||||
|
// store, _ := dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDMTWM, "")
|
||||||
|
// result, err2 := getAPI(store.VendorOrgCode, storeID, "").OrderBatchPullPhoneNumber(vendorStoreID, offset, mtwmapi.MaxBatchPullPhoneNumberLimit)
|
||||||
|
// if err = err2; err == nil {
|
||||||
|
// for _, v := range result {
|
||||||
|
// v2 := &partner.OrderPhoneNumberInfo{
|
||||||
|
// VendorOrderID: utils.Int64ToStr(v.OrderID),
|
||||||
|
// PhoneNumber: v.RealPhoneNumber,
|
||||||
|
// }
|
||||||
|
// if v2.PhoneNumber == "" {
|
||||||
|
// v2.PhoneNumber = v.RealOrderPhoneNumber
|
||||||
|
// }
|
||||||
|
// numberList = append(numberList, v2)
|
||||||
|
// }
|
||||||
|
// if len(result) <= mtwmapi.MaxBatchPullPhoneNumberLimit {
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
// offset += mtwmapi.MaxBatchPullPhoneNumberLimit
|
||||||
|
// } else {
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return numberList, err
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func (p *PurchaseHandler) GetOrderCourierNumber(ctx *jxcontext.Context, storeID int, vendorStoreID string) (numberList []*partner.OrderPhoneNumberInfo, err error) {
|
||||||
|
// offset := 0
|
||||||
|
// for {
|
||||||
|
// store, _ := dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDMTWM, "")
|
||||||
|
// result, err2 := getAPI(store.VendorOrgCode, 0, "").OrderGetRiderInfoPhoneNumber(vendorStoreID, offset, mtwmapi.MaxBatchPullPhoneNumberLimit)
|
||||||
|
// if err = err2; err == nil {
|
||||||
|
// for _, v := range result {
|
||||||
|
// numberList = append(numberList, &partner.OrderPhoneNumberInfo{
|
||||||
|
// VendorOrderID: utils.Int64ToStr(v.OrderID),
|
||||||
|
// PhoneNumber: v.RiderRealPhoneNumber,
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
// if len(result) <= mtwmapi.MaxBatchPullPhoneNumberLimit {
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
// offset += mtwmapi.MaxBatchPullPhoneNumberLimit
|
||||||
|
// } else {
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return numberList, err
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func (p *PurchaseHandler) onNumberDowngrade(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) {
|
||||||
|
// userNumberMap := make(map[string]*partner.OrderPhoneNumberInfo)
|
||||||
|
// courierNumberMap := make(map[string]*partner.OrderPhoneNumberInfo)
|
||||||
|
// orderMap := make(map[string]int)
|
||||||
|
// ctx := jxcontext.AdminCtx
|
||||||
|
// task := tasksch.NewParallelTask("美团外卖平台处理隐私号降级通知", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx,
|
||||||
|
// func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
// step := batchItemList[0].(int)
|
||||||
|
// switch step {
|
||||||
|
// case 0:
|
||||||
|
// userNumberList, err2 := p.GetOrderConsigneeNumber(ctx, 0, "")
|
||||||
|
// if err = err2; err == nil {
|
||||||
|
// for _, v := range userNumberList {
|
||||||
|
// userNumberMap[v.VendorOrderID] = v
|
||||||
|
// orderMap[v.VendorOrderID] = 1
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// case 1:
|
||||||
|
// courierNumberList, err2 := p.GetOrderCourierNumber(ctx, 0, "")
|
||||||
|
// if err = err2; err == nil {
|
||||||
|
// for _, v := range courierNumberList {
|
||||||
|
// courierNumberMap[v.VendorOrderID] = v
|
||||||
|
// orderMap[v.VendorOrderID] = 1
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// case 2:
|
||||||
|
// orderList := jxutils.StringMap2List(orderMap)
|
||||||
|
// if len(orderList) > 0 {
|
||||||
|
// updateTask := tasksch.NewParallelTask("美团外卖平台处理隐私号降级通知/处理订单", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx,
|
||||||
|
// func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
// vendorOrderID := batchItemList[0].(string)
|
||||||
|
// db := dao.GetDB()
|
||||||
|
// if userNumberMap[vendorOrderID] != nil {
|
||||||
|
// _, err = dao.UpdateEntityByKV(db, &model.GoodsOrder{}, map[string]interface{}{
|
||||||
|
// "ConsigneeMobile": userNumberMap[vendorOrderID].PhoneNumber,
|
||||||
|
// "ConsigneeMobile2": userNumberMap[vendorOrderID].PhoneNumber,
|
||||||
|
// }, map[string]interface{}{
|
||||||
|
// model.FieldVendorOrderID: vendorOrderID,
|
||||||
|
// model.FieldVendorID: model.VendorIDMTWM,
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
// if courierNumberMap[vendorOrderID] != nil {
|
||||||
|
// _, err = dao.UpdateEntityByKV(db, &model.Waybill{}, map[string]interface{}{
|
||||||
|
// "CourierMobile": courierNumberMap[vendorOrderID].PhoneNumber,
|
||||||
|
// }, map[string]interface{}{
|
||||||
|
// "VendorWaybillID": vendorOrderID,
|
||||||
|
// "WaybillVendorID": model.VendorIDMTWM,
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
// return retVal, err
|
||||||
|
// }, orderList)
|
||||||
|
// tasksch.HandleTask(updateTask, task, true).Run()
|
||||||
|
// _, err = updateTask.GetResult(0)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return retVal, err
|
||||||
|
// }, []int{0, 1, 2})
|
||||||
|
// tasksch.HandleTask(task, nil, true).Run()
|
||||||
|
// return response
|
||||||
|
//}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package mtwm
|
package tao_vegetable
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
package mtwm
|
package tao_vegetable
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
package mtwm
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
|
||||||
// _ "git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
|
|
||||||
)
|
|
||||||
|
|
||||||
// func TestSyncStoreCategory(t *testing.T) {
|
|
||||||
// hint, err := CurPurchaseHandler.SyncStoreCategory(jxcontext.AdminCtx, nil, testShopID, false)
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// t.Log(hint)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// func TestSyncLocalStoreCategory(t *testing.T) {
|
|
||||||
// hint, err := CurPurchaseHandler.SyncLocalStoreCategory(jxcontext.AdminCtx, nil, testShopID, true, nil)
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// t.Log(hint)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// func TestSyncStoreSkus(t *testing.T) {
|
|
||||||
// hint, err := CurPurchaseHandler.SyncStoreSkus(jxcontext.AdminCtx, nil, testShopID, nil, false, true)
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// t.Log(hint)
|
|
||||||
// }
|
|
||||||
|
|
||||||
func TestDeleteRemoteSkus(t *testing.T) {
|
|
||||||
err := CurPurchaseHandler.DeleteStoreAllSkus(jxcontext.AdminCtx, nil, testShopID, testShopVendorID, true)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestDeleteRemoteCategories(t *testing.T) {
|
|
||||||
err := CurPurchaseHandler.DeleteStoreAllCategories(jxcontext.AdminCtx, nil, testShopID, testShopVendorID, true)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
package mtwm
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
|
||||||
// _ "git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
|
|
||||||
)
|
|
||||||
|
|
||||||
//func TestReadStore(t *testing.T) {
|
|
||||||
// store, err := CurPurchaseHandler.ReadStore(jxcontext.AdminCtx, "", "4351018")
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// t.Log(utils.Format4Output(store, false))
|
|
||||||
//}
|
|
||||||
|
|
||||||
func TestUpdateStore(t *testing.T) {
|
|
||||||
err := CurPurchaseHandler.UpdateStore(nil, 100002, "test")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestConstrainOpTimeList(t *testing.T) {
|
|
||||||
timeList := constrainOpTimeList([]int16{830, 1800}, []int16{
|
|
||||||
0,
|
|
||||||
200,
|
|
||||||
930,
|
|
||||||
1700,
|
|
||||||
})
|
|
||||||
t.Log(utils.Format4Output(timeList, false))
|
|
||||||
if timeList[0] != 930 || timeList[1] != 1700 {
|
|
||||||
t.Fatal("constrainOpTimeList failed")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestGetOpTimeListFromErr(t *testing.T) {
|
|
||||||
err := utils.NewErrorIntCode("当前配送营业时间为:07:00~24:00", mtwmapi.ErrCodeOpFailed)
|
|
||||||
list := getOpTimeListFromErr(err)
|
|
||||||
t.Log(list)
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package mtwm
|
package tao_vegetable
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
@@ -6,8 +6,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||||
@@ -32,7 +30,7 @@ type PurchaseHandler struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
if api.MtwmAPI != nil || api.Mtwm2API != nil {
|
if api.TaoVegetableApi != nil {
|
||||||
CurPurchaseHandler = New()
|
CurPurchaseHandler = New()
|
||||||
partner.RegisterPurchasePlatform(CurPurchaseHandler)
|
partner.RegisterPurchasePlatform(CurPurchaseHandler)
|
||||||
}
|
}
|
||||||
@@ -148,11 +146,11 @@ func bizStatusJX2Mtwm(status int) (openLevel, online int) {
|
|||||||
return mtwmapi.PoiOpenLevelNormal, mtwmapi.PoiStatusOnline
|
return mtwmapi.PoiOpenLevelNormal, mtwmapi.PoiStatusOnline
|
||||||
}
|
}
|
||||||
|
|
||||||
func skuStatusJX2Mtwm(status int) int {
|
func skuStatusJX2Tao(status int) int64 {
|
||||||
if status == model.SkuStatusNormal {
|
if status == model.SkuStatusNormal {
|
||||||
return mtwmapi.SellStatusOnline
|
return tao_vegetable.CreateOnlineSaleFlag
|
||||||
}
|
}
|
||||||
return mtwmapi.SellStatusOffline
|
return tao_vegetable.CreateOfflineSaleFlag
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) {
|
func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) {
|
||||||
@@ -215,23 +213,15 @@ func getAPI(appOrgCode string, storeID int, vendorStoreID string) (apiObj *tao_v
|
|||||||
if appOrgCode == "" {
|
if appOrgCode == "" {
|
||||||
globals.SugarLogger.Debugf("getAPI appOrgCode is empty")
|
globals.SugarLogger.Debugf("getAPI appOrgCode is empty")
|
||||||
}
|
}
|
||||||
apiObj = partner.CurAPIManager.GetAPI(model.VendorIDTaoVegetable, appOrgCode).(*tao_vegetable.API)
|
//apiObj = partner.CurAPIManager.GetAPI(model.VendorIDTaoVegetable, appOrgCode).(*tao_vegetable.API)
|
||||||
var storeDetail *dao.StoreDetail
|
//var storeDetail *dao.StoreDetail
|
||||||
if storeID != model.NO {
|
//if storeID != model.NO {
|
||||||
storeDetail, _ = dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDTaoVegetable, appOrgCode)
|
// storeDetail, _ = dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDTaoVegetable, appOrgCode)
|
||||||
} else if vendorStoreID != "" {
|
//} else if vendorStoreID != "" {
|
||||||
storeDetail, _ = dao.GetStoreDetailByVendorStoreID(dao.GetDB(), vendorStoreID, model.VendorIDTaoVegetable, appOrgCode)
|
// storeDetail, _ = dao.GetStoreDetailByVendorStoreID(dao.GetDB(), vendorStoreID, model.VendorIDTaoVegetable, appOrgCode)
|
||||||
}
|
//}
|
||||||
if storeDetail != nil {
|
//if storeDetail != nil {
|
||||||
apiObj.SetToken(storeDetail.MtwmToken)
|
// apiObj.SetToken(storeDetail.MtwmToken)
|
||||||
}
|
//}
|
||||||
return apiObj
|
return apiObj
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
//func getAPIWithoutToken(appOrgCode string) (apiObj *mtwmapi.API) {
|
|
||||||
// if appOrgCode == "" {
|
|
||||||
// globals.SugarLogger.Warnf("getAPI appOrgCode is empty")
|
|
||||||
// }
|
|
||||||
// return partner.CurAPIManager.GetAPI(model.VendorIDTaoVegetable, appOrgCode).(*mtwmapi.API)
|
|
||||||
//}
|
|
||||||
|
|||||||
@@ -1,63 +0,0 @@
|
|||||||
package mtwm
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
|
||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
|
||||||
"net/url"
|
|
||||||
"testing"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
|
||||||
"git.rosy.net.cn/jx-callback/business/partner"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestOnFinancialMsg(t *testing.T) {
|
|
||||||
msg := &mtwmapi.CallbackMsg{
|
|
||||||
Cmd: "orderRefund",
|
|
||||||
FormData: url.Values{},
|
|
||||||
}
|
|
||||||
msg.FormData.Set("timestamp", utils.Int64ToStr(time.Now().Unix()))
|
|
||||||
msg.FormData.Set("order_id", "33762863167364867")
|
|
||||||
msg.FormData.Set("notify_type", "agree")
|
|
||||||
msg.FormData.Set("money", "23.56")
|
|
||||||
food := []map[string]interface{}{
|
|
||||||
map[string]interface{}{
|
|
||||||
"app_food_code": "123",
|
|
||||||
"food_name": "商品1",
|
|
||||||
"sku_id": "123",
|
|
||||||
"refund_price": 3.14,
|
|
||||||
"count": 2,
|
|
||||||
"box_num": 1,
|
|
||||||
"box_price": 1,
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"app_food_code": "124",
|
|
||||||
"food_name": "商品2",
|
|
||||||
"sku_id": "124",
|
|
||||||
"refund_price": 3.15,
|
|
||||||
"count": 2,
|
|
||||||
"box_num": 1,
|
|
||||||
"box_price": 1,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
msg.FormData.Set("food", string(utils.MustMarshal(food)))
|
|
||||||
res := CurPurchaseHandler.onAfsOrderMsg(msg)
|
|
||||||
fmt.Println(res)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestOnOrderDetail(t *testing.T) {
|
|
||||||
result := map[string]interface{}{
|
|
||||||
"app_order_code": "", "app_poi_code": "2828472", "avg_send_time": 2410, "backup_recipient_phone": "[\"13164714130_7645\"]", "caution": " 【如遇缺货】: 缺货时电话与我沟通 收餐人隐私号 13049813276_5307,手机号 139****5027", "city_id": 440300, "ctime": 1555036346, "day_seq": 1, "delivery_time": 0, "detail": "[{\"app_food_code\":\"27262\",\"box_num\":0,\"box_price\":0,\"cart_id\":0,\"food_discount\":1,\"food_name\":\"红管鱿鱼约250g/份\",\"food_property\":\"\",\"price\":23.54,\"quantity\":1,\"sku_id\":\"27262\",\"spec\":\"250g\",\"unit\":\"份\"},{\"app_food_code\":\"24987\",\"box_num\":0,\"box_price\":0,\"cart_id\":0,\"food_discount\":1,\"food_name\":\"带皮猪梅花肉约250g/份\",\"food_property\":\"\",\"price\":15.84,\"quantity\":1,\"sku_id\":\"24987\",\"spec\":\"250g\",\"unit\":\"份\"},{\"app_food_code\":\"27179\",\"box_num\":0,\"box_price\":0,\"cart_id\":0,\"food_discount\":1,\"food_name\":\"[畅销]龙骨约250g/份\",\"food_property\":\"\",\"price\":18.59,\"quantity\":1,\"sku_id\":\"27179\",\"spec\":\"250g\",\"unit\":\"份\"}]", "dinners_number": 0, "expect_deliver_time": 0, "extras": "[{\"act_detail_id\":664795195,\"mt_charge\":0,\"poi_charge\":5,\"reduce_fee\":5,\"remark\":\"满46.0元减5.0元\",\"type\":2},{\"act_detail_id\":665051798,\"mt_charge\":0,\"poi_charge\":4,\"reduce_fee\":4,\"remark\":\"减配送费4.0元\",\"type\":25},{\"act_detail_id\":274839715,\"mt_charge\":0.5,\"poi_charge\":0,\"reduce_fee\":0.5,\"remark\":\"用户使用了支付红包减0.5元\",\"type\":9},{\"mt_charge\":0,\"poi_charge\":0,\"reduce_fee\":0,\"remark\":\"送30元商家代金券\",\"type\":100},{}]", "has_invoiced": 0, "invoice_title": "", "is_favorites": false, "is_poi_first_order": true, "is_pre": 0, "is_third_shipping": 0, "latitude": 22.530194, "logistics_code": "1001", "longitude": 114.08372, "order_id": 28284722536001020, "order_send_time": 1555036356, "original_price": 63.97, "package_bag_money": 0, "pay_type": 2, "pick_type": 0, "poi_receive_detail": "{\"actOrderChargeByMt\":[{\"comment\":\"活动款\",\"feeTypeDesc\":\"活动款\",\"feeTypeId\":10019,\"moneyCent\":50}],\"actOrderChargeByPoi\":[{\"comment\":\"满46.0元减5.0元\",\"feeTypeDesc\":\"活动款\",\"feeTypeId\":10019,\"moneyCent\":500},{\"comment\":\"减配送费4.0元\",\"feeTypeDesc\":\"活动款\",\"feeTypeId\":10019,\"moneyCent\":400}],\"foodShareFeeChargeByPoi\":490,\"logisticsFee\":600,\"onlinePayment\":5447,\"wmPoiReceiveCent\":4406}", "recipient_address": "汇港名苑 (南2区1005)@#广东省深圳市福田区滨河大道滨河大道3119号汇港名苑", "recipient_name": "颜(女士)", "recipient_phone": "13049813276_5307", "remark": "", "result": "ok", "shipper_phone": "", "shipping_fee": 6, "shipping_type": 0, "source_id": 3, "status": 2, "taxpayer_id": "", "total": 54.47, "utime": 1555036346, "wm_order_id_view": 28284722536001020, "wm_poi_address": "深圳市福田区南园街道南华社区滨河路2037号下小庙南区70栋101号滨河街市场", "wm_poi_id": 2828472, "wm_poi_name": "京西菜市(华强南店)", "wm_poi_phone": "13724313878",
|
|
||||||
}
|
|
||||||
err := new(PurchaseHandler).OnOrderDetail(result, partner.CreatedPeration)
|
|
||||||
fmt.Println(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestName(t *testing.T) {
|
|
||||||
store, err := dao.GetStoreDetailByVendorStoreID(dao.GetDB(), "1", model.VendorIDMTWM, "1")
|
|
||||||
fmt.Println(store)
|
|
||||||
fmt.Println(err)
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,10 +1,8 @@
|
|||||||
package mtwm
|
package tao_vegetable
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
"git.rosy.net.cn/jx-callback/business/partner"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -27,37 +25,33 @@ func (p *PurchaseHandler) GetWaybillStatusFromVendorStatus(vendorStatus string)
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *PurchaseHandler) onWaybillMsg(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) {
|
func (c *PurchaseHandler) onWaybillMsg(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) {
|
||||||
waybill := c.callbackMsg2Waybill(msg)
|
//waybill := c.callbackMsg2Waybill(msg)
|
||||||
err := partner.CurOrderManager.OnWaybillStatusChanged(waybill)
|
//err := partner.CurOrderManager.OnWaybillStatusChanged(waybill)
|
||||||
if err == nil && waybill.Status == model.WaybillStatusDelivering {
|
//if err == nil && waybill.Status == model.WaybillStatusDelivering {
|
||||||
c.postFakeMsg(waybill.VendorOrderID, FakeMsgType, mtwmapi.OrderStatusDelivering)
|
// c.postFakeMsg(waybill.VendorOrderID, FakeMsgType, mtwmapi.OrderStatusDelivering)
|
||||||
}
|
//}
|
||||||
return mtwmapi.Err2CallbackResponse(err, "")
|
//return mtwmapi.Err2CallbackResponse(err, "")
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *PurchaseHandler) callbackMsg2Waybill(msg *mtwmapi.CallbackMsg) (retVal *model.Waybill) {
|
func (c *PurchaseHandler) callbackMsg2Waybill(msg *mtwmapi.CallbackMsg) (retVal *model.Waybill) {
|
||||||
orderID := GetOrderIDFromMsg(msg)
|
//orderID := GetOrderIDFromMsg(msg)
|
||||||
vendorStatus := msg.FormData.Get("logistics_status")
|
//vendorStatus := msg.FormData.Get("logistics_status")
|
||||||
retVal = &model.Waybill{
|
//retVal = &model.Waybill{
|
||||||
VendorOrderID: orderID,
|
// VendorOrderID: orderID,
|
||||||
OrderVendorID: model.VendorIDMTWM,
|
// OrderVendorID: model.VendorIDMTWM,
|
||||||
VendorWaybillID: orderID,
|
// VendorWaybillID: orderID,
|
||||||
WaybillVendorID: model.VendorIDMTWM,
|
// WaybillVendorID: model.VendorIDMTWM,
|
||||||
CourierName: msg.FormData.Get("dispatcher_name"),
|
// CourierName: msg.FormData.Get("dispatcher_name"),
|
||||||
CourierMobile: msg.FormData.Get("dispatcher_mobile"),
|
// CourierMobile: msg.FormData.Get("dispatcher_mobile"),
|
||||||
VendorStatus: vendorStatus,
|
// VendorStatus: vendorStatus,
|
||||||
Status: c.GetWaybillStatusFromVendorStatus(vendorStatus),
|
// Status: c.GetWaybillStatusFromVendorStatus(vendorStatus),
|
||||||
StatusTime: getTimeFromTimestamp(utils.Str2Int64(msg.FormData.Get("time"))),
|
// StatusTime: getTimeFromTimestamp(utils.Str2Int64(msg.FormData.Get("time"))),
|
||||||
Remark: "",
|
// Remark: "",
|
||||||
VendorOrgCode: msg.AppID,
|
// VendorOrgCode: msg.AppID,
|
||||||
}
|
//}
|
||||||
if retVal.StatusTime == utils.DefaultTimeValue {
|
//if retVal.StatusTime == utils.DefaultTimeValue {
|
||||||
retVal.StatusTime = getTimeFromTimestamp(utils.Str2Int64(msg.FormData.Get("timestamp")))
|
// retVal.StatusTime = getTimeFromTimestamp(utils.Str2Int64(msg.FormData.Get("timestamp")))
|
||||||
}
|
|
||||||
|
|
||||||
//if vendorStatus == "4" || vendorStatus == "8" { // 4:美团推送已经(确认骑手)订单 8:美团推送(骑手完成)订单
|
|
||||||
// retVal.DesiredFee = utils.Float64TwoInt64(utils.Str2Float64WithDefault(msg.FormData.Get("shipping_fee"), 0)) // 订单优惠前的总费用
|
|
||||||
// partner.CurOrderManager
|
|
||||||
//}
|
//}
|
||||||
|
|
||||||
return retVal
|
return retVal
|
||||||
|
|||||||
@@ -119,6 +119,7 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode, vendorOrderID, vendorStoreID s
|
|||||||
if result.UserIdInfo != nil {
|
if result.UserIdInfo != nil {
|
||||||
order.VendorUserID = result.UserIdInfo.IdCardNo
|
order.VendorUserID = result.UserIdInfo.IdCardNo
|
||||||
}
|
}
|
||||||
|
|
||||||
originalLng := utils.MustInterface2Float64(result.UserCoordinate.UserCoordinateLongitude)
|
originalLng := utils.MustInterface2Float64(result.UserCoordinate.UserCoordinateLongitude)
|
||||||
originalLat := utils.MustInterface2Float64(result.UserCoordinate.UserCoordinateLatitude)
|
originalLat := utils.MustInterface2Float64(result.UserCoordinate.UserCoordinateLatitude)
|
||||||
order.ConsigneeLng = jxutils.StandardCoordinate2Int(originalLng)
|
order.ConsigneeLng = jxutils.StandardCoordinate2Int(originalLng)
|
||||||
@@ -545,24 +546,6 @@ func (c *PurchaseHandler) postFakeMsg(vendorOrderID, cmd, VendorStatus, appOrgCo
|
|||||||
|
|
||||||
// AcceptOrRefuseOrder 接单或者拒单(isAcceptIt:接单/拒单) 抖店暂无拒单
|
// AcceptOrRefuseOrder 接单或者拒单(isAcceptIt:接单/拒单) 抖店暂无拒单
|
||||||
func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) {
|
func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) {
|
||||||
//if isAcceptIt {
|
|
||||||
// if globals.EnableMtwmStoreWrite {
|
|
||||||
// err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").OrderConfirm(utils.Str2Int64(order.VendorOrderID))
|
|
||||||
// if err != nil {
|
|
||||||
// if utils.IsErrMatch(err, utils.Int2Str(mtwmapi.ErrCodeOpFailed), []string{
|
|
||||||
// "订单已经确认过了",
|
|
||||||
// }) {
|
|
||||||
// err = nil
|
|
||||||
// } else {
|
|
||||||
// globals.SugarLogger.Warnf("mtwm AcceptOrRefuseOrder orderID:%s failed with err:%v", order.VendorOrderID, err)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//} else {
|
|
||||||
// if globals.EnableMtwmStoreWrite {
|
|
||||||
// err = c.CancelOrder(jxcontext.AdminCtx, order, "bu")
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -90,11 +90,11 @@ func (c *PurchaseHandler) onAfsOrderMsg(msgId string, msg interface{}) (retVal *
|
|||||||
VendorOrgCode: utils.Int2Str(vendorOrgCode),
|
VendorOrgCode: utils.Int2Str(vendorOrgCode),
|
||||||
}
|
}
|
||||||
afsOrder.FreightUserMoney = tiktokAfsOrderDetail.Data.ProcessInfo.AfterSaleInfo.RefundPostAmount
|
afsOrder.FreightUserMoney = tiktokAfsOrderDetail.Data.ProcessInfo.AfterSaleInfo.RefundPostAmount
|
||||||
afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用
|
afsOrder.AfsFreightMoney = tiktokAfsOrderDetail.Data.ProcessInfo.AfterSaleInfo.RefundPostAmount // 暂时未发现退货取件费用
|
||||||
afsOrder.BoxMoney = 0 // 餐盒费
|
afsOrder.BoxMoney = 0 // 餐盒费
|
||||||
afsOrder.TongchengFreightMoney = 0 // 同城配送费
|
afsOrder.TongchengFreightMoney = 0 // 同城配送费
|
||||||
afsOrder.SkuBoxMoney = 0 // 商品包装费
|
afsOrder.SkuBoxMoney = 0 // 商品包装费
|
||||||
afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态
|
afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态
|
||||||
for _, sku := range tiktokAfsOrderDetail.Data.OrderInfo.SkuOrderInfos {
|
for _, sku := range tiktokAfsOrderDetail.Data.OrderInfo.SkuOrderInfos {
|
||||||
orderSku := &model.OrderSkuFinancial{
|
orderSku := &model.OrderSkuFinancial{
|
||||||
Count: int(sku.AfterSaleItemCount),
|
Count: int(sku.AfterSaleItemCount),
|
||||||
|
|||||||
@@ -296,6 +296,7 @@ func (p *PurchaseHandler) CancelActs(ctx *jxcontext.Context, vendorOrgCode strin
|
|||||||
// return cancelOneShopAct(putils.GetFixDirectDownAct(vendorOrgCode, storeID, 0), vendorStoreID, putils.StoreSku2ActStoreSku(model.SyncFlagDeletedMask, vendorStoreID, storeSkuList))
|
// return cancelOneShopAct(putils.GetFixDirectDownAct(vendorOrgCode, storeID, 0), vendorStoreID, putils.StoreSku2ActStoreSku(model.SyncFlagDeletedMask, vendorStoreID, storeSkuList))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateStoreSkusSpecTag 更新限购
|
||||||
func (p *PurchaseHandler) UpdateStoreSkusSpecTag(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) {
|
func (p *PurchaseHandler) UpdateStoreSkusSpecTag(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) {
|
||||||
//var foodDataList []map[string]interface{}
|
//var foodDataList []map[string]interface{}
|
||||||
//for _, v := range storeSkuList {
|
//for _, v := range storeSkuList {
|
||||||
|
|||||||
@@ -156,6 +156,7 @@ storeNameMtwm = "京西菜市"
|
|||||||
storeNameEbai = "饿鲜达"
|
storeNameEbai = "饿鲜达"
|
||||||
storeNameEbai2 = "好菜鲜生"
|
storeNameEbai2 = "好菜鲜生"
|
||||||
storeNameTiktok = "抖音小时购"
|
storeNameTiktok = "抖音小时购"
|
||||||
|
storeNameTao = "淘鲜达"
|
||||||
|
|
||||||
smsSignName = "京西菜市"
|
smsSignName = "京西菜市"
|
||||||
smsMobileVerifyTemplate = "SMS_175583158"
|
smsMobileVerifyTemplate = "SMS_175583158"
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ type StoreSkuController struct {
|
|||||||
// @Param jdSyncStatus query int false "京东同步标识"
|
// @Param jdSyncStatus query int false "京东同步标识"
|
||||||
// @Param ebaiSyncStatus query int false "饿百同步标识"
|
// @Param ebaiSyncStatus query int false "饿百同步标识"
|
||||||
// @Param mtwmSyncStatus query int false "美团外卖同步标识"
|
// @Param mtwmSyncStatus query int false "美团外卖同步标识"
|
||||||
|
// @Param taoSyncStatus query int false "淘先达同步标识"
|
||||||
// @Param lockTime query string false "价格锁定时间"
|
// @Param lockTime query string false "价格锁定时间"
|
||||||
// @Success 200 {object} controllers.CallResult
|
// @Success 200 {object} controllers.CallResult
|
||||||
// @Failure 200 {object} controllers.CallResult
|
// @Failure 200 {object} controllers.CallResult
|
||||||
@@ -88,6 +89,7 @@ func (c *StoreSkuController) GetStoreSkus() {
|
|||||||
// @Param jdSyncStatus query int false "京东同步标识"
|
// @Param jdSyncStatus query int false "京东同步标识"
|
||||||
// @Param ebaiSyncStatus query int false "饿百同步标识"
|
// @Param ebaiSyncStatus query int false "饿百同步标识"
|
||||||
// @Param mtwmSyncStatus query int false "美团外卖同步标识"
|
// @Param mtwmSyncStatus query int false "美团外卖同步标识"
|
||||||
|
// @Param taoSyncStatus query int false "陶先达同步标识"
|
||||||
// @Param lockTime query string false "价格锁定时间"
|
// @Param lockTime query string false "价格锁定时间"
|
||||||
// @Param isHighPrice query bool false "是否查过高价格商品,0是忽略,1是高价,-1是低价"
|
// @Param isHighPrice query bool false "是否查过高价格商品,0是忽略,1是高价,-1是低价"
|
||||||
// @Param priceType query int false "是否查过高价格商品,0是忽略,1是高价,-1是低价"
|
// @Param priceType query int false "是否查过高价格商品,0是忽略,1是高价,-1是低价"
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
package controllers
|
package controllers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxstore/common"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
|
taoVegetable "git.rosy.net.cn/jx-callback/business/partner/purchase/tao_vegetable"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
"git.rosy.net.cn/jx-callback/globals/api"
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
"github.com/astaxie/beego/server/web"
|
"github.com/astaxie/beego/server/web"
|
||||||
@@ -13,14 +18,14 @@ type TaoBaoVegetableController struct {
|
|||||||
web.Controller
|
web.Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetCode 淘菜菜获取商户授权code
|
// GetCode 淘菜菜获取商户授权code,这个code和token是门店层次的
|
||||||
func (c *TaoBaoVegetableController) GetCode() {
|
func (c *TaoBaoVegetableController) GetCode() {
|
||||||
codeData := ""
|
codeData := ""
|
||||||
if c.Ctx.Input.Method() == http.MethodPost {
|
if c.Ctx.Input.Method() == http.MethodPost {
|
||||||
body, err := ioutil.ReadAll(c.Ctx.Request.Body)
|
body, err := ioutil.ReadAll(c.Ctx.Request.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
globals.SugarLogger.Debugf("商户收取code获取:%s,%s", string(body), err.Error())
|
globals.SugarLogger.Debugf("商户收取code获取:%s,%s", string(body), err.Error())
|
||||||
c.Data["json"] = MsgFail()
|
c.Data["json"] = tao_vegetable.CallBackResultInfo(err)
|
||||||
c.ServeJSON()
|
c.ServeJSON()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -33,11 +38,114 @@ func (c *TaoBaoVegetableController) GetCode() {
|
|||||||
tokenInfo, err := api.TaoVegetableApi.GetStoreToken(codeData, "")
|
tokenInfo, err := api.TaoVegetableApi.GetStoreToken(codeData, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
globals.SugarLogger.Debugf("获取门店token错误:%s", err.Error())
|
globals.SugarLogger.Debugf("获取门店token错误:%s", err.Error())
|
||||||
c.Data["json"] = MsgFail()
|
c.Data["json"] = tao_vegetable.CallBackResultInfo(err)
|
||||||
c.ServeJSON()
|
c.ServeJSON()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
globals.SugarLogger.Debugf("token:%s", utils.Format4Output(tokenInfo, false))
|
globals.SugarLogger.Debugf("token:%s", utils.Format4Output(tokenInfo, false))
|
||||||
// 创建storeMap门店信息
|
|
||||||
// 刷新token
|
// 创建或者更新账号token
|
||||||
|
param := &model.VendorOrgCode{
|
||||||
|
VendorID: model.VendorIDTaoVegetable,
|
||||||
|
VendorOrgCode: api.TaoVegetableApi.GetVendorOrgCode(),
|
||||||
|
Comment: tokenInfo.UserNick,
|
||||||
|
VendorType: "platform",
|
||||||
|
IsJxCat: 1,
|
||||||
|
IsOpen: 1,
|
||||||
|
EmpowerURL: "http://oauth.hemaos.com/authorize?\nresponse_type=code&sp=hema&op=topApp&client_id=" + api.TaoVegetableApi.GetVendorOrgCode(),
|
||||||
|
StoreBrandName: "自动更新(京西菜市)",
|
||||||
|
Token: utils.Format4Output(tokenInfo, false),
|
||||||
|
AppKey: api.TaoVegetableApi.GetVendorOrgCode(),
|
||||||
|
AppSecret: api.TaoVegetableApi.GetAppSecret(),
|
||||||
|
}
|
||||||
|
if err := common.AddVendorOrgCode(nil, param); err != nil {
|
||||||
|
c.Data["json"] = tiktok_api.CallbackResponse{Code: tiktok_api.CallbackFailCode, Msg: tiktok_api.CallbackFail}
|
||||||
|
c.ServeJSON()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.Data["json"] = tao_vegetable.CallBackResultInfo(nil)
|
||||||
|
c.ServeJSON()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// OrderStatus 订单状态变化 [post]
|
||||||
|
func (c *TaoBaoVegetableController) OrderStatus() {
|
||||||
|
order, err := api.TaoVegetableApi.ReaderOrderInfo(c.Ctx.Request)
|
||||||
|
globals.SugarLogger.Debugf("OrderStatus := %s", utils.Format4Output(order, false))
|
||||||
|
if err != nil {
|
||||||
|
globals.SugarLogger.Debugf("订单状态变化:%s", err.Error())
|
||||||
|
c.Data["json"] = tao_vegetable.CallBackResultInfo(err)
|
||||||
|
c.ServeJSON()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusChange, utils.Int64ToStr(order.BizOrderId), order)
|
||||||
|
c.Data["json"] = callbackResponse
|
||||||
|
c.ServeJSON()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ApplyCancelOrder 用户发起售后申请
|
||||||
|
func (c *TaoBaoVegetableController) ApplyCancelOrder() {
|
||||||
|
afsOrder, err := api.TaoVegetableApi.UserApplyRefund(c.Ctx.Request)
|
||||||
|
globals.SugarLogger.Debugf("ApplyCancelOrder := %s", utils.Format4Output(afsOrder, false))
|
||||||
|
if err != nil {
|
||||||
|
globals.SugarLogger.Debugf("用户发起售后:%s", err.Error())
|
||||||
|
c.Data["json"] = tao_vegetable.CallBackResultInfo(err)
|
||||||
|
c.ServeJSON()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusApplyAfs, afsOrder.OutOrderId, afsOrder)
|
||||||
|
c.Data["json"] = callbackResponse
|
||||||
|
c.ServeJSON()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// UserCancelRefund 用户取消售后
|
||||||
|
func (c *TaoBaoVegetableController) UserCancelRefund() {
|
||||||
|
afsOrder, err := api.TaoVegetableApi.UserCancelRefundApply(c.Ctx.Request)
|
||||||
|
globals.SugarLogger.Debugf("UserCancelRefund := %s", utils.Format4Output(afsOrder, false))
|
||||||
|
if err != nil {
|
||||||
|
globals.SugarLogger.Debugf("用户取消售后:%s", err.Error())
|
||||||
|
c.Data["json"] = tao_vegetable.CallBackResultInfo(err)
|
||||||
|
c.ServeJSON()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusCancelAfs, afsOrder.OutOrderId, afsOrder)
|
||||||
|
c.Data["json"] = callbackResponse
|
||||||
|
c.ServeJSON()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// CancelOnSaleRefundOrder 用户售中取消(走订单取消流程)
|
||||||
|
func (c *TaoBaoVegetableController) CancelOnSaleRefundOrder() {
|
||||||
|
afsOrder, err := api.TaoVegetableApi.OnSaleRefundOrder(c.Ctx.Request)
|
||||||
|
globals.SugarLogger.Debugf("CancelOnSaleRefundOrder := %s", utils.Format4Output(afsOrder, false))
|
||||||
|
if err != nil {
|
||||||
|
globals.SugarLogger.Debugf("用户售中取消:%s", err.Error())
|
||||||
|
c.Data["json"] = tao_vegetable.CallBackResultInfo(err)
|
||||||
|
c.ServeJSON()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusOnSaleCancel, utils.Int64ToStr(afsOrder.BizOrderId), afsOrder)
|
||||||
|
c.Data["json"] = callbackResponse
|
||||||
|
c.ServeJSON()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// RefundOrderSuccess 用户售后成功通知,只有退款成功了才会通知(商户拒绝退款,不会通知)
|
||||||
|
func (c *TaoBaoVegetableController) RefundOrderSuccess() {
|
||||||
|
refundSuccess, err := api.TaoVegetableApi.RefundOrderFinish(c.Ctx.Request)
|
||||||
|
globals.SugarLogger.Debugf("RefundOrderSuccess := %s", utils.Format4Output(refundSuccess, false))
|
||||||
|
if err != nil {
|
||||||
|
globals.SugarLogger.Debugf("用户售后成功消息通知:%s", err.Error())
|
||||||
|
c.Data["json"] = tao_vegetable.CallBackResultInfo(err)
|
||||||
|
c.ServeJSON()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusRefundSuccess, refundSuccess.OutSubOrderId, refundSuccess)
|
||||||
|
c.Data["json"] = callbackResponse
|
||||||
|
c.ServeJSON()
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ var (
|
|||||||
LogisticsApi *ali_logistics_query.API // 阿里云提供获取物流订单的配送信息
|
LogisticsApi *ali_logistics_query.API // 阿里云提供获取物流订单的配送信息
|
||||||
KuaiShouApi *kuaishou_mini.API // 快手平台
|
KuaiShouApi *kuaishou_mini.API // 快手平台
|
||||||
UniAppApi *uinapp.API // uinapp 消息通知
|
UniAppApi *uinapp.API // uinapp 消息通知
|
||||||
TaoVegetableApi tao_vegetable.API // 淘菜菜
|
TaoVegetableApi *tao_vegetable.API // 淘菜菜
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|||||||
@@ -93,6 +93,11 @@ func (a *APIManager) GetAppOrgCodeList(vendorID int) (appOrgCodeList []string) {
|
|||||||
for _, v := range vendorOrgCodes {
|
for _, v := range vendorOrgCodes {
|
||||||
appOrgCodeList = append(appOrgCodeList, v.VendorOrgCode)
|
appOrgCodeList = append(appOrgCodeList, v.VendorOrgCode)
|
||||||
}
|
}
|
||||||
|
case model.VendorIDTaoVegetable:
|
||||||
|
vendorOrgCodes, _ := dao.GetVendorOrgCode(dao.GetDB(), model.VendorIDTaoVegetable, "", model.VendorOrgTypePlatform)
|
||||||
|
for _, v := range vendorOrgCodes {
|
||||||
|
appOrgCodeList = append(appOrgCodeList, v.VendorOrgCode)
|
||||||
|
}
|
||||||
case model.VendorIDMTWM:
|
case model.VendorIDMTWM:
|
||||||
appOrgCodeList = []string{api.MtwmAPI.GetAppID(), api.Mtwm2API.GetAppID()}
|
appOrgCodeList = []string{api.MtwmAPI.GetAppID(), api.Mtwm2API.GetAppID()}
|
||||||
case model.VendorIDEBAI:
|
case model.VendorIDEBAI:
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ var (
|
|||||||
StoreNameTiktok string
|
StoreNameTiktok string
|
||||||
StoreNameEbai string
|
StoreNameEbai string
|
||||||
StoreNameEbai2 string
|
StoreNameEbai2 string
|
||||||
|
StoreNameTao string
|
||||||
|
|
||||||
SMSSignName string
|
SMSSignName string
|
||||||
SMSMobileVerifyTemplate string
|
SMSMobileVerifyTemplate string
|
||||||
@@ -137,6 +138,7 @@ func Init() {
|
|||||||
StoreName = web.AppConfig.DefaultString("storeName", "")
|
StoreName = web.AppConfig.DefaultString("storeName", "")
|
||||||
StoreNameMtwm = web.AppConfig.DefaultString("storeNameMtwm", "")
|
StoreNameMtwm = web.AppConfig.DefaultString("storeNameMtwm", "")
|
||||||
StoreNameTiktok = web.AppConfig.DefaultString("storeNameTiktok", "")
|
StoreNameTiktok = web.AppConfig.DefaultString("storeNameTiktok", "")
|
||||||
|
StoreNameTao = web.AppConfig.DefaultString("storeNameTao", "")
|
||||||
StoreNameEbai = web.AppConfig.DefaultString("storeNameEbai", "")
|
StoreNameEbai = web.AppConfig.DefaultString("storeNameEbai", "")
|
||||||
StoreNameEbai2 = web.AppConfig.DefaultString("storeNameEbai2", "")
|
StoreNameEbai2 = web.AppConfig.DefaultString("storeNameEbai2", "")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user