添加淘鲜达

This commit is contained in:
邹宗楠
2023-06-28 10:04:08 +08:00
parent 64e4339aeb
commit c0a97b4fad
51 changed files with 2109 additions and 2007 deletions

View File

@@ -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
} }

View File

@@ -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

View File

@@ -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

View File

@@ -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
} }

View File

@@ -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{}{

View File

@@ -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,
} }

View File

@@ -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))

View File

@@ -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)

View File

@@ -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: "美团配送",

View File

@@ -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 // 已确认收到货

View File

@@ -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")
} }

View File

@@ -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
} }
} }

View File

@@ -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"

View File

@@ -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"`
} }

View File

@@ -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"`

View File

@@ -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
} }

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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() {

View File

@@ -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 {

View File

@@ -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 ""
}

View File

@@ -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)

View File

@@ -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)

View File

@@ -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))

View File

@@ -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 {

View File

@@ -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"

View File

@@ -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
} }

View File

@@ -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

View File

@@ -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

View File

@@ -1,4 +1,4 @@
package mtwm package tao_vegetable
import ( import (
"strings" "strings"

View File

@@ -1,4 +1,4 @@
package mtwm package tao_vegetable
import ( import (
"testing" "testing"

View 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而不是空01538103149不是特殊值只是一个任意之前的时间这样写可以处理
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
//}

View File

@@ -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

View File

@@ -1,4 +1,4 @@
package mtwm package tao_vegetable
import ( import (
"testing" "testing"

View File

@@ -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)
}
}

View File

@@ -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)
}

View File

@@ -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)
//}

View File

@@ -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)
}

View File

@@ -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

View File

@@ -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
} }

View File

@@ -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),

View File

@@ -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 {

View File

@@ -156,6 +156,7 @@ storeNameMtwm = "京西菜市"
storeNameEbai = "饿鲜达" storeNameEbai = "饿鲜达"
storeNameEbai2 = "好菜鲜生" storeNameEbai2 = "好菜鲜生"
storeNameTiktok = "抖音小时购" storeNameTiktok = "抖音小时购"
storeNameTao = "淘鲜达"
smsSignName = "京西菜市" smsSignName = "京西菜市"
smsMobileVerifyTemplate = "SMS_175583158" smsMobileVerifyTemplate = "SMS_175583158"

View File

@@ -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是低价"

View File

@@ -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
} }

View File

@@ -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() {

View File

@@ -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:

View File

@@ -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", "")