Merge branch 'jdshop' of https://e.coding.net/rosydev/jx-callback into jdshop

This commit is contained in:
richboo111
2023-07-31 17:36:48 +08:00
14 changed files with 577 additions and 425 deletions

View File

@@ -2686,16 +2686,17 @@ func UpdateTiktokShopTotalMoney() {
func UpdateTaoSettleInfo() { func UpdateTaoSettleInfo() {
db := dao.GetDB() db := dao.GetDB()
storeMaps, err := dao.GetStoresMapList(db, []int{model.VendorIDTaoVegetable}, nil, nil, 0, 0, "", "", "") storeMaps, err := dao.GetStoresMapList(db, []int{model.VendorIDTaoVegetable}, []int{667321}, nil, -9, -1, "", "", "")
if err != nil { if err != nil {
return return
} }
globals.SugarLogger.Debugf("GetStoresMapList ========== %s", utils.Format4Output(storeMaps, false))
timeStart := time.Now().Add(-72 * time.Hour) timeStart := time.Now().Add(-72 * time.Hour)
startTime := time.Date(timeStart.Year(), timeStart.Month(), timeStart.Day(), 0, 0, 0, 0, timeStart.Location()) startTime := time.Date(timeStart.Year(), timeStart.Month(), timeStart.Day(), 0, 0, 0, 0, timeStart.Location())
timeEnd := time.Now() timeEnd := time.Now()
endTiem := time.Date(timeEnd.Year(), timeEnd.Month(), timeEnd.Day()-1, 23, 59, 59, 0, timeStart.Location()) endTiem := time.Date(timeEnd.Year(), timeEnd.Month(), timeEnd.Day()-1, 23, 59, 59, 0, timeStart.Location())
for _, v := range storeMaps { for _, v := range storeMaps {
globals.SugarLogger.Debugf("=============UpdateTaoSettleInfo := %s", utils.Format4Output(v, false))
settleInfo, err := tao.GetOrderTotalShopMoney(v.VendorOrgCode, v.VendorStoreID, startTime, endTiem) settleInfo, err := tao.GetOrderTotalShopMoney(v.VendorOrgCode, v.VendorStoreID, startTime, endTiem)
if err != nil { if err != nil {
globals.SugarLogger.Errorf("获取淘鲜达结算信息异常 := %v", err) globals.SugarLogger.Errorf("获取淘鲜达结算信息异常 := %v", err)
@@ -2707,6 +2708,7 @@ func UpdateTaoSettleInfo() {
} }
for orderId2, settle := range settleInfo { for orderId2, settle := range settleInfo {
globals.SugarLogger.Debugf("=============settleInfo := %s,%s", utils.Format4Output(orderId2, false), settle)
goodsOrder, err := partner.CurOrderManager.LoadOrder2(orderId2, model.VendorIDTaoVegetable) goodsOrder, err := partner.CurOrderManager.LoadOrder2(orderId2, model.VendorIDTaoVegetable)
if err != nil || goodsOrder == nil { if err != nil || goodsOrder == nil {
globals.SugarLogger.Debugf("门店[%d:%s],订单查询异常[%s:%v]", v.StoreID, v.StoreName, orderId2, err) globals.SugarLogger.Debugf("门店[%d:%s],订单查询异常[%s:%v]", v.StoreID, v.StoreName, orderId2, err)

View File

@@ -1515,7 +1515,8 @@ func (s *DefScheduler) updateBillsInfo(savedOrderInfo *WatchOrderInfo, bill *mod
func (s *DefScheduler) autoPickupGood(savedOrderInfo *WatchOrderInfo) (err error) { func (s *DefScheduler) autoPickupGood(savedOrderInfo *WatchOrderInfo) (err error) {
order := savedOrderInfo.order order := savedOrderInfo.order
store, _ := dao.GetStoreDetail(dao.GetDB(), order.JxStoreID, order.VendorID, "") store, _ := dao.GetStoreDetail(dao.GetDB(), order.JxStoreID, order.VendorID, "")
flag := (model.IsOrderDeliveryByStore(order) || model.IsOrderDeliveryBySelf(order)) && store.AutoPickup == model.YES //flag := (model.IsOrderDeliveryByStore(order) || model.IsOrderDeliveryBySelf(order)) && store.AutoPickup == model.YES
flag := store.AutoPickup == model.YES && store.VendorStatus == model.StoreStatusOpened // 只要打开了就可以自动拣货
if err = s.PickupGoods(order, flag, "autoPickup"); err == nil { if err = s.PickupGoods(order, flag, "autoPickup"); err == nil {
order.DeliveryFlag |= model.OrderDeliveryFlagMaskAutoPickup order.DeliveryFlag |= model.OrderDeliveryFlagMaskAutoPickup
partner.CurOrderManager.UpdateOrderFields(order, []string{"DeliveryFlag"}) partner.CurOrderManager.UpdateOrderFields(order, []string{"DeliveryFlag"})

View File

@@ -3653,9 +3653,9 @@ func GetStoreCategoryMap(ctx *jxcontext.Context, parentID, level int, storeID in
if err != nil { if err != nil {
return nil, err return nil, err
} }
if ctx.GetLoginType() != auth2.AuthTypePassword && ctx.GetLoginType() != weixin.AuthTypeMP && ctx.GetLoginType() != weixin.AuthTypeMini && ctx.GetLoginType() != weixin.AuthTypeWxApp && ctx.GetLoginType() != weixin.AuthTypeWxAppCaishi && ctx.GetLoginType() != auth2.AuthTypeMobile { //if ctx.GetLoginType() != auth2.AuthTypePassword && ctx.GetLoginType() != weixin.AuthTypeMP && ctx.GetLoginType() != weixin.AuthTypeMini && ctx.GetLoginType() != weixin.AuthTypeWxApp && ctx.GetLoginType() != weixin.AuthTypeWxAppCaishi && ctx.GetLoginType() != auth2.AuthTypeMobile {
return storeCatMaps, err // return storeCatMaps, err
} //}
//表示没有门店分类 //表示没有门店分类
if len(storeCatMaps) == 0 { if len(storeCatMaps) == 0 {
storeCatMaps, err = dao.GetCategoriesForStore(db, parentID, 0, nil) storeCatMaps, err = dao.GetCategoriesForStore(db, parentID, 0, nil)

View File

@@ -1744,6 +1744,7 @@ func UpdateStoresSkus(ctx *jxcontext.Context, causeFlag int, storeIDs []int, sku
} }
} else { } else {
flag, _ := doStoreSkuAudit(ctx, storeIDs, skuBindInfos) flag, _ := doStoreSkuAudit(ctx, storeIDs, skuBindInfos)
globals.SugarLogger.Debugf("========falg := %s", utils.Format4Output(flag, false))
if !flag { if !flag {
var num int64 var num int64
db := dao.GetDB() db := dao.GetDB()
@@ -5941,6 +5942,7 @@ func doStoreSkuAudit(ctx *jxcontext.Context, storeIDs []int, skuBindInfos []*Sto
return false, err return false, err
} }
} }
storeSkuAudit := &model.StoreSkuAudit{ storeSkuAudit := &model.StoreSkuAudit{
StoreID: storeID, StoreID: storeID,
NameID: skuBindInfo.NameID, NameID: skuBindInfo.NameID,

View File

@@ -203,10 +203,10 @@ func Init() {
"09:35:00", "09:35:00",
}) })
/// 更新淘鲜达结算信息 /// 更新淘鲜达结算信息
ScheduleTimerFunc("UpdateTiktokShopTotalMoney", func() { ScheduleTimerFunc("UpdateTaoTotalMoney", func() {
orderman.UpdateTaoSettleInfo() orderman.UpdateTaoSettleInfo()
}, []string{ }, []string{
"23:20:00", "17:35:00",
}) })
// 每分钟轮询一次,推送骑手信息 // 每分钟轮询一次,推送骑手信息
@@ -282,149 +282,338 @@ func Init() {
// 淘鲜达更新门店商品 ,接口收费暂不使用 // 淘鲜达更新门店商品 ,接口收费暂不使用
if beego.BConfig.RunMode != "jxgy" { if beego.BConfig.RunMode != "jxgy" {
ScheduleTimerFunc("RefreshSyncSkuList_tao", func() { ScheduleTimerFunc("RefreshSyncSkuList_tao", func() {
var beijin = []int{ var hangzhou = []int{
//102683, // 杭州
//102542, //669073,
//102514, //668930,
//102382, //668922,
//102182, //668916,
//102178, //668915,
//102173, //668756,
//102098, //668705,
//102094, //668702,
//102080, //668681,
//102072, //668422,
//102069, //668417,
//101870, //668191,
//101869, //667996,
//101868, //667991,
//101867, //667985,
//101866, //667553,
//101865, //667044,
//100956, //103083,
//100930, //103073,
//100871, //103033,
//100786, //103032,
//100746, //102963,
//100744, //102923,
//100726, //102785,
//100705, //102594,
//100400, //102578,
//100111, //102329,
//100108, //101734,
//100106, //100229,
//100104, //100224,
//100103, //100217,
//100102, //100215,
//100100, //100210,
//100097, //100206,
//100096, //// 武汉
//100095, //668352, 103200, 102958, 100887, 100236,
//100093, //// 广州
//100092, 668871, 668602, 668575, 668262, 103425, 101755, 101176, 100557, 100369, 100361, 100351, 100350,
//100089, //成都
//100087, 669172,
//100086, 669171,
//100085, 669170,
//100082, 669169,
//100079, 669168,
//100078, 669165,
//669158, 669164,
//668691, 669163,
//668673, 669162,
//668282, 669157,
//667447, 669156,
//667354, 669155,
//667321, 669154,
//667319, 669153,
//667316, 669150,
//667269, 669149,
//667268, 669148,
//667267, 669147,
//667260, 669146,
//667132, 669144,
//667094, 669141,
//667030, 669139,
//666965, 669138,
//666714, 669137,
//666708, 669134,
//666705, 669132,
//103437, 669127,
//103349, 669124,
//103123, 669122,
//103121, 669121,
//103106, 669120,
//103038, 669119,
//103028, 669114,
//103019, 669113,
//102831, 669111,
//102751, 669110,
//上海 669109,
668462, 669108,
668276, 669107,
668180, 669106,
667320, 669103,
667237, 669100,
667231, 669099,
667068, 669098,
667036, 669097,
666678, 669096,
103191, 669095,
103074, 669094,
103065, 669093,
103051, 669092,
103050, 669091,
103037, 669087,
103029, 669086,
103018, 669085,
103002, 669084,
102999, 669083,
102969, 669082,
102966, 669079,
102951, 669078,
102946, 669077,
102939, 669075,
102938, 669074,
102934, 669072,
102933, 669070,
102930, 669067,
102924, 669064,
102920, 669063,
102908, 669062,
102903, 669060,
102561, 669059,
102293, 669056,
100946, 669055,
100945, 669054,
100943, 669050,
100935, 669049,
100905, 669047,
100720, 669046,
100325, 669045,
100324, 669042,
100309, 669041,
100299, 669038,
100296, 669036,
100292, 669035,
100290, 669033,
669032,
669031,
669027,
669025,
669024,
669022,
669021,
669020,
669017,
669015,
669014,
669012,
669009,
669007,
669002,
669000,
668999,
668997,
668996,
668993,
668988,
668986,
668984,
668966,
668963,
668961,
668958,
668954,
668950,
668948,
668946,
668943,
668938,
668928,
668910,
668907,
668900,
668897,
668896,
668891,
668889,
668883,
668882,
668868,
668860,
668855,
668853,
668850,
668849,
668843,
668838,
668807,
668802,
668784,
668773,
668771,
668767,
668766,
668755,
668749,
668728,
668724,
668722,
668721,
668716,
668706,
668704,
668699,
668697,
668695,
668693,
668692,
668688,
668686,
668682,
668680,
668679,
668678,
668672,
668666,
668662,
668660,
668659,
668656,
668655,
668654,
668649,
668648,
668643,
668642,
668640,
668636,
668632,
668631,
668629,
668624,
668616,
668613,
668608,
668594,
668548,
668543,
668540,
668537,
668530,
668512,
668258,
668257,
668256,
668254,
668203,
668190,
668186,
668185,
668182,
668170,
668169,
668168,
668166,
668165,
668164,
668157,
668156,
668125,
668121,
668095,
668094,
668071,
667959,
667745,
667744,
667743,
667563,
667562,
667561,
667560,
667559,
667558,
667556,
667420,
667332,
667308,
667305,
667304,
667299,
667292,
667285,
667281,
667278,
667263,
667001,
666975,
666677,
666667,
666666,
103408,
103184,
103174,
103127,
103113,
102925,
102740,
102736,
102630,
102383,
102180,
101942,
101897,
101875,
101036,
100840,
100743,
100654,
100471,
100144,
100135,
100129,
100126,
100123,
100115,
} }
syncStoreSkuTao(beijin) syncStoreSkuTao(hangzhou)
}, []string{ }, []string{
"00:30:00", "00:30:00",
"01:30:00",
"02:30:00", "02:30:00",
"03:30:00",
"04:30:00", "04:30:00",
"05:30:00",
"06:30:00",
"07:30:00", "07:30:00",
"09:00:00", "08:30:00",
"10:40:00", "09:35:00",
"12:55:00", "10:30:00",
"11:30:00",
"12:30:00",
"13:30:00", "13:30:00",
"14:30:00", "14:30:00",
"15:30:00", "15:30:00",
"16:30:00", "16:30:00",
"17:30:00", "17:30:00",
"18:40:00", "18:30:00",
"19:30:00",
"20:30:00", "20:30:00",
"21:30:00",
"22:30:00", "22:30:00",
"23:30:00",
}) })
} }
@@ -754,9 +943,6 @@ func syncStoreSku() {
tasksch.HandleTask(task, nil, true).Run() tasksch.HandleTask(task, nil, true).Run()
} }
//var storeIds = []int{
// 668802, 668787, 668785, 668777, 668769, 668776, 668770, 668760, 668758, 668756, 668748, 668727, 668723, 300372, 668715, 668717, 668707, 668667, 668668, 800306, 668628, 668681, 668673, 668544, 668619, 668614, 668600, 102217, 667405, 100988, 668353, 103022, 668283, 667208, 668266, 102101, 100610, 103201, 103459, 667154, 102691, 666747, 103417, 666744, 666864, 102186, 667271, 101750, 101031, 667452, 666942, 666927, 100068, 668339, 668306, 668310, 667352, 102544, 667014, 102280, 667134, 102945, 103062, 102443, 668218, 666913, 102742, 668360, 102851, 668580, 667252, 666746, 100455, 667037, 667317, 667473, 666816, 103063, 666800, 668210, 103079, 668200, 668176, 667462, 102426, 667116, 668309, 100193, 666828, 666944, 102852, 666900, 668521, 668373, 102596, 668444, 667071, 668264, 668395, 668090, 102172, 102790, 101935, 667480, 102479, 103197, 102703, 668386, 668229, 666948, 101008, 668249, 102374, 667464, 668468, 102490, 666756, 102976, 667467, 666707, 668270, 667429, 103098, 668135, 668523, 666907, 668407, 668358, 668385, 101134, 100887, 668568, 668003, 101763, 100829, 667476, 101078, 668099, 668503, 666807, 100167, 100433, 668107, 667262, 100849, 102771, 667173, 666847, 667485, 102821, 666955, 101107, 667229, 102950, 103435, 102497, 666916, 668163, 668061, 102147, 668248, 667066, 102853, 667944, 100002, 102865, 668219, 100184, 666840, 667057, 668202, 102223, 667101, 667128, 101110, 668511, 103151, 667093, 668154, 666905, 668268, 666929, 102935, 102074, 668174, 668217, 102350, 666940, 102980, 668117, 668384, 100067, 101916, 102987, 667250, 668570, 667466, 101099, 667082, 100229, 667553, 100215, 667991, 100217, 103073, 103074, 103037, 668180, 668583, 668462, 667891, 666811, 666736, 668173, 100267, 102962, 102752, 668284, 667296, 668175, 667806, 103103, 103084, 668453, 102970, 103184, 668548, 101036, 668182, 668157, 668257, 668166, 668543, 668170, 668071, 667744, 102925, 100115, 668093, 667745, 668164, 668156, 667743, 668165, 103408, 103038, 667268, 667094, 667321, 100726, 102333, 666742, 101775, 100028, 668304, 667305, 101942, 668575, 101755, 103425, 102833, 100699, 103190, 666711, 668396, 100334, 102533, 100336, 101995, 102320, 101842, 102519, 101999, 102433, 100920, 102594, 102951, 668506, 666667, 102963, 300034, 667212, 100236, 101909, 668541, 102857, 668417, 102955, 103031, 668545, 666790, 100328}
func syncStoreSkuTiktok() { func syncStoreSkuTiktok() {
//syncFlag := 0 | model.SyncFlagSaleMask //syncFlag := 0 | model.SyncFlagSaleMask
syncFlag := 0 syncFlag := 0
@@ -795,8 +981,8 @@ func syncStoreSkuTao(beijin []int) {
switch step { switch step {
case 0: case 0:
if beego.BConfig.RunMode != "jxgy" { if beego.BConfig.RunMode != "jxgy" {
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "2452A93EEB9111EC9B06525400E86DC0", "淘鲜达消息:", utils.Format4Output(beijin[syncLen:syncLen+5], false)) ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "2452A93EEB9111EC9B06525400E86DC0", "淘鲜达消息:", utils.Format4Output(beijin[syncLen:syncLen+3], false))
_, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{model.VendorIDTaoVegetable}, beijin[syncLen:syncLen+5], false, nil, nil, syncFlag, true, true) _, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{model.VendorIDTaoVegetable}, beijin[syncLen:syncLen+3], false, nil, nil, syncFlag, true, true)
errList.AddErr(err) errList.AddErr(err)
} }
case 1: case 1:
@@ -807,7 +993,7 @@ func syncStoreSkuTao(beijin []int) {
return retVal, err return retVal, err
}, []int{0, 1}) }, []int{0, 1})
tasksch.HandleTask(task, nil, true).Run() tasksch.HandleTask(task, nil, true).Run()
syncLen += 5 syncLen += 3
} }
func doDailyWork2() { func doDailyWork2() {

View File

@@ -3,7 +3,6 @@ package netspider
import ( import (
"testing" "testing"
"git.rosy.net.cn/jx-callback/business/jxutils/ditu"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
@@ -16,21 +15,6 @@ func init() {
testinit.Init() testinit.Init()
} }
func TestGetStoreListByCoordinate(t *testing.T) {
storeList, err := getStoreListByCoordinates(jxcontext.AdminCtx, nil, 3, "成都",
[]*ditu.Coordinate{
&ditu.Coordinate{
Lng: 104.057218,
Lat: 30.6949,
},
})
if err != nil {
t.Fatal(err)
}
t.Log(utils.Format4Output(storeList, false))
t.Log(len(storeList))
}
func TestGetCityShops(t *testing.T) { func TestGetCityShops(t *testing.T) {
shopList, err := GetCityShops(jxcontext.AdminCtx, nil, []int{0, 3}, 510100, 5000, 3000) shopList, err := GetCityShops(jxcontext.AdminCtx, nil, []int{0, 3}, 510100, 5000, 3000)
if err != nil { if err != nil {

View File

@@ -207,7 +207,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
case model.VendorIDMTWM: // 美团订单 case model.VendorIDMTWM: // 美团订单
if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil { if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil {
if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorStoreID, utils.Struct2Map(riderInfo, "", true)); err != 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) globals.SugarLogger.Debugf("Error pushing meituan rider information :%s--%s--%v", v.VendorOrderID, utils.Format4Output(riderInfo, false), err)
} }
} }
case model.VendorIDELM: // 饿了么 case model.VendorIDELM: // 饿了么
@@ -233,7 +233,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
if orderId == "" { if orderId == "" {
if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil { if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil {
if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorStoreID, utils.Struct2Map(riderInfo, "", true)); err != 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) globals.SugarLogger.Debugf("Error pushing meituan rider information :%s--%s--%v", v.VendorOrderID, utils.Format4Output(riderInfo, false), err)
} }
} }
} else { // 订单状态改变 [配送中/用户签收/用户拒收] } else { // 订单状态改变 [配送中/用户签收/用户拒收]
@@ -243,7 +243,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
} }
} }
default: default:
globals.SugarLogger.Errorf("Order source error, non system order: %s", v.VendorOrderID) globals.SugarLogger.Debugf("Order source error, non system order: %s", v.VendorOrderID)
continue continue
} }
} }

View File

@@ -442,6 +442,7 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
} }
func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bool, userName string) (err error) { func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bool, userName string) (err error) {
isSelfDelivery = model.IsOrderDeliveryByStore(order) || model.IsOrderDeliveryBySelf(order)
if !isSelfDelivery && globals.EnableJdStoreWrite { if !isSelfDelivery && globals.EnableJdStoreWrite {
_, err = getAPI(order.VendorOrgCode).OrderJDZBDelivery(order.VendorOrderID, userName) _, err = getAPI(order.VendorOrgCode).OrderJDZBDelivery(order.VendorOrderID, userName)
} else { } else {

View File

@@ -514,6 +514,7 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
} }
func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bool, userName string) (err error) { func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bool, userName string) (err error) {
isSelfDelivery = model.IsOrderDeliveryByStore(order) || model.IsOrderDeliveryBySelf(order)
if !isSelfDelivery { if !isSelfDelivery {
if globals.EnableMtwmStoreWrite { if globals.EnableMtwmStoreWrite {
// err = api.MtwmAPI.OrderConfirm(utils.Str2Int64(order.VendorOrderID)) // err = api.MtwmAPI.OrderConfirm(utils.Str2Int64(order.VendorOrderID))

View File

@@ -528,19 +528,19 @@ func (c *PurchaseHandler) CanSwitch2SelfDeliver(order *model.GoodsOrder) (isCan
func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) { func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) {
param, err := orderStatusChangeNotice(order, tao_vegetable.OrderStatusCallRider) param, err := orderStatusChangeNotice(order, tao_vegetable.OrderStatusCallRider)
if err != nil { if err != nil {
return err return nil
} }
if err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").DeliveryFinish(param); err != nil { if err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").DeliveryFinish(param); err != nil && !strings.Contains(err.Error(), "当前状态不允许更新") {
globals.SugarLogger.Debugf("Swtich2SelfDeliver 出库失败可能是BizSubOrderId 没填写 : %s", err.Error()) globals.SugarLogger.Debugf("Swtich2SelfDeliver 出库失败可能是BizSubOrderId 没填写 : %s", err.Error())
return err
} }
return err return nil
} }
// Swtich2SelfDelivered 订单送达 // Swtich2SelfDelivered 订单送达
func (c *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (err error) { func (c *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (err error) {
return err param := OrderStatusChangeDelivery(order, tao_vegetable.OrderStatusDeliveryOver)
return getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").DeliveryFinish(param)
} }
// SelfDeliverDelivering 自配送订单配送中 // SelfDeliverDelivering 自配送订单配送中

View File

@@ -82,60 +82,38 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
queryOrderDetailParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{ queryOrderDetailParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
StoreId: utils.String2Pointer(refundData.StoreId), StoreId: utils.String2Pointer(refundData.StoreId),
}} }}
order, err := partner.CurOrderManager.LoadOrder2(refundData.OutOrderId, model.VendorIDTaoVegetable)
if err != nil { queryOrderDetailParam.OrderGetRequest.BizOrderId = utils.Int64ToPointer(utils.Str2Int64(orderStatus.RefVendorOrderID))
globals.SugarLogger.Debugf("用户申请售后时,通过售后外部渠道订单号获取主订单失败:%s", err.Error())
return tao_vegetable.CallBackResultInfo(err)
}
if order == nil {
globals.SugarLogger.Debugf("数据库订单查询失败,订单号异常 :%s", refundData.OutOrderId)
return tao_vegetable.CallBackResultInfo(errors.New("订单号异常"))
}
queryOrderDetailParam.OrderGetRequest.BizOrderId = utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID))
skuList, err := api.QueryOrderDetail(queryOrderDetailParam) skuList, err := api.QueryOrderDetail(queryOrderDetailParam)
if err != nil { if err != nil {
return tao_vegetable.CallBackResultInfo(err) return tao_vegetable.CallBackResultInfo(err)
} }
if *skuList.OrderStatus != tao_vegetable.OrderStatusSuccess {
// 用户申请售后,只有订单完成之后才可以!现在是售中取消和售后取消都在走这个接口
// 所以只处理售后取消的消息
return tao_vegetable.CallBackResultInfo(nil)
}
afsOrder = &model.AfsOrder{
VendorID: model.VendorIDTaoVegetable,
AfsOrderID: orderStatus.VendorOrderID,
VendorOrderID: orderStatus.RefVendorOrderID,
VendorStoreID: refundData.StoreId,
StoreID: 0,
AfsCreatedAt: orderStatus.StatusTime,
VendorAppealType: status, // 原始售后方式
AppealType: model.AfsAppealTypeUserCancel, // 淘宝这个接口下发的只有用户取消
VendorReasonType: refundData.RefundReason,
ReasonType: 0,
ReasonDesc: refundData.RefundReason,
ReasonImgList: utils.LimitUTF8StringLen(refundData.RefundPictures, 1024),
VendorOrgCode: api.GetVendorOrgCode(),
}
refundIds := make([]int64, 0, 0)
bizOrderIds := make([]int64, len(refundData.SubRefundOrders))
for _, v := range refundData.SubRefundOrders {
bizOrderIds = append(bizOrderIds, utils.Str2Int64(v.OutSubOrderId))
}
refundIds = append(refundIds, utils.Str2Int64(refundData.BizRefundId))
afsOrder.FreightUserMoney = 0 // 订单运费
afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用
afsOrder.BoxMoney = 0 // 餐盒费
afsOrder.TongchengFreightMoney = 0 // 同城配送费
afsOrder.SkuBoxMoney = 0 // 商品包装费
afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态
var refundSkuCount int64 = 0 // 子订单申请退款的商品数
var orderSkuCount int64 = 0 // 子订单购买的商品数
for _, refundSku := range refundData.SubRefundOrders { // 本次退款订单 for _, refundSku := range refundData.SubRefundOrders { // 本次退款订单
afsOrder = &model.AfsOrder{
VendorID: model.VendorIDTaoVegetable,
VendorOrderID: orderStatus.RefVendorOrderID,
VendorStoreID: refundData.StoreId,
StoreID: 0,
AfsCreatedAt: orderStatus.StatusTime,
VendorAppealType: status, // 原始售后方式
AppealType: model.AfsAppealTypeUserCancel, // 淘宝这个接口下发的只有用户取消
VendorReasonType: refundData.RefundReason,
ReasonType: 0,
ReasonDesc: refundData.RefundReason,
ReasonImgList: utils.LimitUTF8StringLen(refundData.RefundPictures, 1024),
VendorOrgCode: api.GetVendorOrgCode(),
VendorOrderID2: refundData.RefundId,
}
afsOrder.FreightUserMoney = 0 // 订单运费
afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用
afsOrder.BoxMoney = 0 // 餐盒费
afsOrder.TongchengFreightMoney = 0 // 同城配送费
afsOrder.SkuBoxMoney = 0 // 商品包装费
afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态
var refundSkuCount int64 = 0 // 子订单申请退款的商品数
var orderSkuCount int64 = 0 // 子订单购买的商品数
refundSkuCount += refundSku.RefundAmount refundSkuCount += refundSku.RefundAmount
for _, sku := range *skuList.SubOrderResponseList { // 总订单 for _, sku := range *skuList.SubOrderResponseList { // 总订单
if refundSku.OutSubOrderId == *sku.OutSubOrderId { if refundSku.OutSubOrderId == *sku.OutSubOrderId {
@@ -152,26 +130,42 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney
afsOrder.Skus = append(afsOrder.Skus, orderSku) afsOrder.Skus = append(afsOrder.Skus, orderSku)
orderSkuCount += utils.Float64TwoInt64(*sku.BuySaleQuantity) orderSkuCount += utils.Float64TwoInt64(*sku.BuySaleQuantity)
afsOrder.VendorOrderID = utils.Int64ToStr(*skuList.BizOrderId)
afsOrder.AfsOrderID = utils.Int64ToStr(*sku.BizSubOrderId)
} }
} }
}
if refundSkuCount == orderSkuCount && refundData.RefundFee == *skuList.PayFee { // 全退
afsOrder.RefundType = model.AfsTypeFullRefund
} else {
afsOrder.RefundType = model.AfsTypePartRefund
}
afsOrder.SkuUserMoney += refundData.RefundFee
if afsOrder != nil { if refundSkuCount == orderSkuCount && refundData.RefundFee == *skuList.PayFee { // 全退
afsOrder.RefundType = model.AfsTypeFullRefund
} else {
afsOrder.RefundType = model.AfsTypePartRefund
}
afsOrder.SkuUserMoney += refundData.RefundFee
afs2, _ := partner.CurOrderManager.LoadAfsOrder(afsOrder.AfsOrderID, afsOrder.VendorID)
if afs2 != nil {
_, err = dao.DeleteEntity(db, afsOrder, "VendorOrderID", "AfsOrderID", "VendorID")
_, err = dao.DeleteEntity(db, &model.OrderSkuFinancial{
VendorOrderID: afsOrder.VendorOrderID,
VendorID: afsOrder.VendorID,
IsAfsOrder: 1,
AfsOrderID: afsOrder.AfsOrderID,
}, "VendorOrderID", "VendorID", "IsAfsOrder", "AfsOrderID")
afsOrder.ReasonDesc += "(拒绝退款后,用户再次申请)"
}
//直接就来一个新的售后单,并且还是售后完成的 //直接就来一个新的售后单,并且还是售后完成的
if orderStatus.Status == model.AfsOrderStatusFinished { if orderStatus.Status == model.AfsOrderStatusFinished {
afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt
} }
orderStatus.RefVendorOrderID = afsOrder.VendorOrderID
orderStatus.VendorOrderID = afsOrder.AfsOrderID
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus) err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
} }
case tao_vegetable.OrderStatusCancelAfs: case tao_vegetable.OrderStatusCancelAfs:
globals.SugarLogger.Debugf("用户取消售后----------- %s", utils.Format4Output(msg, false))
// 删除售后单 // 删除售后单
afsOrder, err := dao.GetAfsOrders(db, model.VendorIDTaoVegetable, orderStatus.RefVendorOrderID, orderStatus.VendorOrderID) afsOrder, err := dao.GetAfsOrders(db, model.VendorIDTaoVegetable, orderStatus.RefVendorOrderID, "")
if err != nil || afsOrder == nil { if err != nil || afsOrder == nil {
globals.SugarLogger.Debugf("用户取消售后单,获取之前生成的售后单失败") globals.SugarLogger.Debugf("用户取消售后单,获取之前生成的售后单失败")
return tao_vegetable.CallBackResultInfo(err) return tao_vegetable.CallBackResultInfo(err)
@@ -180,27 +174,27 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
cancelMsg := msg.(*tao_vegetable.UserCancelRefundApply) cancelMsg := msg.(*tao_vegetable.UserCancelRefundApply)
for _, v := range afsOrder { for _, v := range afsOrder {
// 商家驳回,会发出用户撤销的回调通知,不管他 // 商家驳回,会发出用户撤销的回调通知,不管他
if v.AfsOrderID == cancelMsg.RefundId && v.Flag == model.AfsOrderFlagRefuseUserRefund { if v.VendorOrderID2 != cancelMsg.RefundId {
return tao_vegetable.CallBackResultInfo(nil) continue
} }
// 用户撤销未处理的售后订单 // 用户撤销未处理的售后订单
if v.AfsOrderID == cancelMsg.RefundId && v.Flag == 0 { if v.Flag == 0 {
// 下面处理用户撤销售后 // 下面处理用户撤销售后
if err = utils.CallFuncLogError(func() error { if err = utils.CallFuncLogError(func() error {
_, err = dao.DeleteEntity(db, v, "VendorOrderID", "VendorID") _, err = dao.DeleteEntity(db, v, "VendorOrderID", "AfsOrderID", "VendorID")
return err return err
}, "SaveAfsOrder delete AfsOrder, afsOrderID:%s", v.AfsOrderID); err != nil { }, "SaveAfsOrder delete AfsOrder, afsOrderID:%s", v.AfsOrderID); err != nil {
return tao_vegetable.CallBackResultInfo(err) return tao_vegetable.CallBackResultInfo(err)
} }
// 删除售后商品 // 删除售后商品
if err = utils.CallFuncLogError(func() error { if err = utils.CallFuncLogError(func() error {
_, err = dao.DeleteEntity(db, &model.OrderSkuFinancial{ _, err = dao.DeleteEntity(db, &model.OrderSkuFinancial{
VendorOrderID: v.VendorOrderID, VendorOrderID: v.VendorOrderID,
VendorID: v.VendorID, VendorID: v.VendorID,
IsAfsOrder: 1, IsAfsOrder: 1,
}, "VendorOrderID", "VendorID", "IsAfsOrder") AfsOrderID: v.AfsOrderID,
}, "VendorOrderID", "VendorID", "IsAfsOrder", "AfsOrderID")
return err return err
}, "SaveAfsOrder delete OrderSkuFinancial, afsOrderID:%s", v.AfsOrderID); err != nil { }, "SaveAfsOrder delete OrderSkuFinancial, afsOrderID:%s", v.AfsOrderID); err != nil {
return tao_vegetable.CallBackResultInfo(err) return tao_vegetable.CallBackResultInfo(err)
@@ -212,6 +206,7 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
// 你这边没有响应那么就不会退钱给用户,就会造成客诉。为什么不接售中取消呢 // 你这边没有响应那么就不会退钱给用户,就会造成客诉。为什么不接售中取消呢
case tao_vegetable.OrderStatusOnSaleCancel: case tao_vegetable.OrderStatusOnSaleCancel:
onSaleMsg := msg.(*tao_vegetable.OnSaleCancel) onSaleMsg := msg.(*tao_vegetable.OnSaleCancel)
globals.SugarLogger.Debugf("=========售中取消: %s", utils.Format4Output(msg, false))
var afsOrder *model.AfsOrder var afsOrder *model.AfsOrder
var api = getAPI("", 0, onSaleMsg.PartCancelRequest.StoreId) var api = getAPI("", 0, onSaleMsg.PartCancelRequest.StoreId)
queryOrderDetailParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{ queryOrderDetailParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
@@ -223,75 +218,78 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
return tao_vegetable.CallBackResultInfo(err) return tao_vegetable.CallBackResultInfo(err)
} }
afsOrder = &model.AfsOrder{ for _, v1 := range onSaleMsg.PartCancelRequest.SubOrders {
VendorID: model.VendorIDTaoVegetable, afsOrder = &model.AfsOrder{
AfsOrderID: onSaleMsg.PartCancelRequest.IdempotentId, VendorID: model.VendorIDTaoVegetable,
VendorOrderID: orderStatus.RefVendorOrderID, AfsOrderID: utils.Int64ToStr(v1.BizSubOrderId),
VendorStoreID: onSaleMsg.PartCancelRequest.StoreId, VendorOrderID: orderStatus.RefVendorOrderID,
StoreID: 0, VendorStoreID: onSaleMsg.PartCancelRequest.StoreId,
AfsCreatedAt: orderStatus.StatusTime, StoreID: 0,
VendorAppealType: status, // 原始售后方式 AfsCreatedAt: orderStatus.StatusTime,
AppealType: model.AfsAppealTypeUserCancel, // 淘宝这个接口下发的只有用户取消 VendorAppealType: status, // 原始售后方式
VendorReasonType: tao_vegetable.OrderStatusOnSaleCancel, AppealType: model.AfsAppealTypeUserCancel, // 淘宝这个接口下发的只有用户取消
ReasonType: 0, VendorReasonType: tao_vegetable.OrderStatusOnSaleCancel,
ReasonDesc: "售中取消:订单未打包,或者长时间为送到!响应成功直接退款", ReasonType: 0,
VendorOrgCode: api.GetVendorOrgCode(), ReasonDesc: "售中取消:订单未打包,或者长时间为送到!响应成功直接退款",
} VendorOrgCode: api.GetVendorOrgCode(),
afsOrder.FreightUserMoney = 0 // 订单运费 }
afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用 afsOrder.FreightUserMoney = 0 // 订单运费
afsOrder.BoxMoney = 0 // 餐盒费 afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用
afsOrder.TongchengFreightMoney = 0 // 同城配送 afsOrder.BoxMoney = 0 // 餐盒
afsOrder.SkuBoxMoney = 0 // 商品包装 afsOrder.TongchengFreightMoney = 0 // 同城配送
afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态 afsOrder.SkuBoxMoney = 0 // 商品包装费
afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态
ifAfsTypeFullRefund := false ifAfsTypeFullRefund := false
var refundFee int64 = 0 var refundFee int64 = 0
for _, v := range *orderDetail.SubOrderResponseList { for _, v := range *orderDetail.SubOrderResponseList {
for _, v2 := range onSaleMsg.PartCancelRequest.SubOrders { for _, v2 := range onSaleMsg.PartCancelRequest.SubOrders {
if *v.BizSubOrderId == v2.BizSubOrderId { if *v.BizSubOrderId == v2.BizSubOrderId {
orderSku := &model.OrderSkuFinancial{ orderSku := &model.OrderSkuFinancial{
Count: utils.Float64TwoInt(*v.BuySaleQuantity), Count: utils.Float64TwoInt(*v.BuySaleQuantity),
VendorSkuID: *v.SkuCode, VendorSkuID: *v.SkuCode,
SkuID: utils.Str2Int(*v.SkuCode), SkuID: utils.Str2Int(*v.SkuCode),
Name: *v.SkuName, Name: *v.SkuName,
UserMoney: *v.OriginalFee, UserMoney: *v.OriginalFee,
PmSkuSubsidyMoney: *v.DiscountPlatformFee, // 平台补贴商品 PmSkuSubsidyMoney: *v.DiscountPlatformFee, // 平台补贴商品
VendorOrderID: orderStatus.VendorOrderID, VendorOrderID: orderStatus.VendorOrderID,
VendorSubOrderID: *v.OutSubOrderId, VendorSubOrderID: *v.OutSubOrderId,
}
afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney
afsOrder.Skus = append(afsOrder.Skus, orderSku)
refundFee += *v.OriginalFee
} }
afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney
afsOrder.Skus = append(afsOrder.Skus, orderSku)
refundFee += *v.OriginalFee
} }
} }
} if len(onSaleMsg.PartCancelRequest.SubOrders) == len(*orderDetail.SubOrderResponseList) {
if len(onSaleMsg.PartCancelRequest.SubOrders) == len(*orderDetail.SubOrderResponseList) { ifAfsTypeFullRefund = true
ifAfsTypeFullRefund = true }
afsOrder.SkuUserMoney += refundFee
if ifAfsTypeFullRefund { // 全退
afsOrder.RefundType = model.AfsTypeFullRefund
afsOrder.SkuUserMoney += *orderDetail.PostFee
afsOrder.Skus[len(afsOrder.Skus)-1].UserMoney += *orderDetail.PostFee
} else {
afsOrder.RefundType = model.AfsTypePartRefund
}
if afsOrder != nil {
//直接就来一个新的售后单,并且还是售后完成的
afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt
afsOrder.Flag = model.AfsOrderFlagAgreeUserRefund
orderStatus.VendorOrderID = afsOrder.AfsOrderID
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
}
} }
afsOrder.SkuUserMoney += refundFee
if ifAfsTypeFullRefund { // 全退
afsOrder.RefundType = model.AfsTypeFullRefund
afsOrder.SkuUserMoney += *orderDetail.PostFee
afsOrder.Skus[len(afsOrder.Skus)-1].UserMoney += *orderDetail.PostFee
} else {
afsOrder.RefundType = model.AfsTypePartRefund
}
if afsOrder != nil {
//直接就来一个新的售后单,并且还是售后完成的
afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt
afsOrder.Flag = model.AfsOrderFlagAgreeUserRefund
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
}
case tao_vegetable.OrderStatusRefundSuccess: case tao_vegetable.OrderStatusRefundSuccess:
globals.SugarLogger.Debugf("=========售后成功: %s", utils.Format4Output(msg, false))
// 用户退款成功回调,缺货拣货时,送达回触发.此时并没有售后单 // 用户退款成功回调,缺货拣货时,送达回触发.此时并没有售后单
if scarceGoods != nil { if scarceGoods != nil {
refundSuccess := msg.(*tao_vegetable.RefundOrderFinish) refundSuccess := msg.(*tao_vegetable.RefundOrderFinish)
var afsOrder *model.AfsOrder var afsOrder *model.AfsOrder
var api = getAPI("", 0, refundSuccess.StoreId) var api = getAPI("", 0, refundSuccess.StoreId)
var isCreate = true
var outMainRefundIds = make(map[string]int64, 0)
detail, err := api.QueryAfsOrderDetail(&request591.AlibabaWdkOrderRefundGetRequest{ detail, err := api.QueryAfsOrderDetail(&request591.AlibabaWdkOrderRefundGetRequest{
OrderFrom: utils.Int64ToPointer(tao_vegetable.ChannelCome), OrderFrom: utils.Int64ToPointer(tao_vegetable.ChannelCome),
ShopId: nil, ShopId: nil,
@@ -301,84 +299,70 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
if err != nil { if err != nil {
return tao_vegetable.CallBackResultInfo(err) return tao_vegetable.CallBackResultInfo(err)
} }
finalList, _ := dao.GetOrderRefundSkuList(db, []string{refundSuccess.OutMainRefundId})
if len(finalList) != model.NO { for _, v := range *detail.Orders {
for _, f := range finalList { afs, _ := partner.CurOrderManager.LoadAfsOrder(utils.Int64ToStr(*v.OriginOrderId), model.VendorIDTaoVegetable)
for _, a := range *detail.Orders { if afs != nil {
if f.SkuID == utils.Str2Int(*a.ItemCode) { afsOrder = &model.AfsOrder{
isCreate = false // 本地已经存在了记录 VendorID: model.VendorIDTaoVegetable,
outMainRefundIds[*a.OutMainRefundId] = *a.RefundAmount AfsOrderID: utils.Int64ToStr(*v.OriginOrderId),
VendorOrderID: orderStatus.RefVendorOrderID,
VendorOrderID2: refundSuccess.BizSubRefundId,
VendorStoreID: refundSuccess.StoreId,
StoreID: 0,
AfsCreatedAt: orderStatus.StatusTime,
VendorAppealType: status, // 原始售后方式
AppealType: model.AfsAppealTypeUserCancel, // 淘宝这个接口下发的只有用户取消
VendorReasonType: tao_vegetable.OrderStatusOnSaleCancel,
ReasonType: 0,
ReasonDesc: "缺货调整,退款成功通知",
VendorOrgCode: api.GetVendorOrgCode(),
}
afsOrder.FreightUserMoney = 0 // 订单运费
afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用
afsOrder.BoxMoney = 0 // 餐盒费
afsOrder.TongchengFreightMoney = 0 // 同城配送费
afsOrder.SkuBoxMoney = 0 // 商品包装费
afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态
for _, v := range *scarceGoods {
var refundFee int64 = 0
skuDetail := tao_vegetable.GoodsScarceRefund{}
if err := json.Unmarshal([]byte(*v.Attributes), &skuDetail); err != nil {
return tao_vegetable.CallBackResultInfo(err)
}
orderSku := &model.OrderSkuFinancial{
Count: utils.Float64TwoInt(utils.Str2Float64(*v.RefundQuantity)),
VendorSkuID: *v.SkuCode,
SkuID: utils.Str2Int(*v.SkuCode),
Name: skuDetail.SkuName,
UserMoney: *v.RefundAmount,
PmSkuSubsidyMoney: 0, // 平台补贴商品
VendorOrderID: orderStatus.VendorOrderID,
VendorSubOrderID: *v.OutOrderId,
}
afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney
afsOrder.Skus = append(afsOrder.Skus, orderSku)
refundFee += *v.RefundAmount
afsOrder.SkuUserMoney += refundFee
afsOrder.RefundType = model.AfsTypePartRefund
if afsOrder != nil {
//直接就来一个新的售后单,并且还是售后完成的
afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt
afsOrder.Flag = model.AfsOrderFlagAgreeUserRefund
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
} }
} }
} } else {
}
// 本地已经存在了售后记录,直接修改售后状态,否则创建售后记录
if !isCreate {
for afsOrderId, afsMoney := range outMainRefundIds {
afs, _ := partner.CurOrderManager.LoadAfsOrder(afsOrderId, model.VendorIDTaoVegetable)
afs.VendorOrderID2 = refundSuccess.BizSubRefundId afs.VendorOrderID2 = refundSuccess.BizSubRefundId
afs.AfsFinishedAt = time.Now() afs.AfsFinishedAt = time.Now()
afs.Status = model.AfsOrderStatusFinished afs.Status = model.AfsOrderStatusFinished
afs.AfsTotalShopMoney = afsMoney afs.AfsTotalShopMoney = *v.RefundAmount
dao.UpdateEntity(db, afs, "VendorOrderID2", "AfsFinishedAt", "Status", "AfsTotalShopMoney") dao.UpdateEntity(db, afs, "VendorOrderID2", "AfsFinishedAt", "Status", "AfsTotalShopMoney")
} }
} else {
afsOrder = &model.AfsOrder{
VendorID: model.VendorIDTaoVegetable,
AfsOrderID: refundSuccess.OutMainRefundId,
VendorOrderID: orderStatus.RefVendorOrderID,
VendorOrderID2: refundSuccess.BizSubRefundId,
VendorStoreID: refundSuccess.StoreId,
StoreID: 0,
AfsCreatedAt: orderStatus.StatusTime,
VendorAppealType: status, // 原始售后方式
AppealType: model.AfsAppealTypeUserCancel, // 淘宝这个接口下发的只有用户取消
VendorReasonType: tao_vegetable.OrderStatusOnSaleCancel,
ReasonType: 0,
ReasonDesc: "缺货调整,退款成功通知",
VendorOrgCode: api.GetVendorOrgCode(),
}
afsOrder.FreightUserMoney = 0 // 订单运费
afsOrder.AfsFreightMoney = 0 // 暂时未发现退货取件费用
afsOrder.BoxMoney = 0 // 餐盒费
afsOrder.TongchengFreightMoney = 0 // 同城配送费
afsOrder.SkuBoxMoney = 0 // 商品包装费
afsOrder.VendorStatus = orderStatus.VendorStatus // 退货状态
for _, v := range *scarceGoods {
var refundFee int64 = 0
skuDetail := tao_vegetable.GoodsScarceRefund{}
if err := json.Unmarshal([]byte(*v.Attributes), &skuDetail); err != nil {
return tao_vegetable.CallBackResultInfo(err)
}
orderSku := &model.OrderSkuFinancial{
Count: utils.Float64TwoInt(utils.Str2Float64(*v.RefundQuantity)),
VendorSkuID: *v.SkuCode,
SkuID: utils.Str2Int(*v.SkuCode),
Name: skuDetail.SkuName,
UserMoney: *v.RefundAmount,
PmSkuSubsidyMoney: 0, // 平台补贴商品
VendorOrderID: orderStatus.VendorOrderID,
VendorSubOrderID: *v.OutOrderId,
}
afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney
afsOrder.Skus = append(afsOrder.Skus, orderSku)
refundFee += *v.RefundAmount
afsOrder.SkuUserMoney += refundFee
afsOrder.RefundType = model.AfsTypePartRefund
if afsOrder != nil {
//直接就来一个新的售后单,并且还是售后完成的
afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt
afsOrder.Flag = model.AfsOrderFlagAgreeUserRefund
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
}
}
} }
} }
default: default:
@@ -418,66 +402,62 @@ func (c *PurchaseHandler) callbackAfsMsg2Status(status string, msg interface{})
switch status { switch status {
case tao_vegetable.OrderStatusApplyAfs: // 用户申请售后 case tao_vegetable.OrderStatusApplyAfs: // 用户申请售后
refundData := msg.(*tao_vegetable.UserApplyRefundCallBack) refundData := msg.(*tao_vegetable.UserApplyRefundCallBack)
orderStatus.RefVendorOrderID = refundData.OutOrderId
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusApplyAfs, "用户申请取消") orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusApplyAfs, "用户申请取消")
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusApplyAfs) orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusApplyAfs)
orderStatus.StatusTime = time.Now() orderStatus.StatusTime = time.Now()
orderStatus.Remark = refundData.Remarks orderStatus.Remark = refundData.Remarks
orderStatus.VendorOrderID = refundData.RefundId //orderStatus.VendorOrderID = refundData.RefundId
order, _ := partner.CurOrderManager.LoadOrder2(orderStatus.RefVendorOrderID, model.VendorIDTaoVegetable)
if order != nil { order, _ := partner.CurOrderManager.LoadOrder2(refundData.OutOrderId, model.VendorIDTaoVegetable)
orderStatus.RefVendorOrderID = order.VendorOrderID orderStatus.RefVendorOrderID = order.VendorOrderID
}
case tao_vegetable.OrderStatusCancelAfs: // 用户取消售后 case tao_vegetable.OrderStatusCancelAfs: // 用户取消售后
refundData := msg.(*tao_vegetable.UserCancelRefundApply) refundData := msg.(*tao_vegetable.UserCancelRefundApply)
orderStatus.RefVendorOrderID = refundData.OutOrderId
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusCancelAfs, "用户取消售后申请") orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusCancelAfs, "用户取消售后申请")
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusCancelAfs) orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusCancelAfs)
orderStatus.StatusTime = time.Now() orderStatus.StatusTime = time.Now()
orderStatus.VendorOrderID = refundData.RefundId orderStatus.VendorOrderID = refundData.RefundId
order, _ := partner.CurOrderManager.LoadOrder2(orderStatus.RefVendorOrderID, model.VendorIDTaoVegetable) order, _ := partner.CurOrderManager.LoadOrder2(refundData.OutOrderId, model.VendorIDTaoVegetable)
if order != nil { orderStatus.RefVendorOrderID = order.VendorOrderID
orderStatus.RefVendorOrderID = order.VendorOrderID
}
case tao_vegetable.OrderStatusOnSaleCancel: case tao_vegetable.OrderStatusOnSaleCancel:
refundData := msg.(*tao_vegetable.OnSaleCancel) refundData := msg.(*tao_vegetable.OnSaleCancel)
orderStatus.RefVendorOrderID = utils.Int64ToStr(refundData.PartCancelRequest.BizOrderId) orderStatus.RefVendorOrderID = utils.Int64ToStr(refundData.PartCancelRequest.BizOrderId)
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusOnSaleCancel, "用户售中取消") orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusOnSaleCancel, "用户售中取消")
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusOnSaleCancel) orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusOnSaleCancel)
orderStatus.StatusTime = time.Now() orderStatus.StatusTime = time.Now()
//orderStatus.VendorOrderID = refundData.IdempotentId orderStatus.VendorOrderID = utils.Int64ToStr(refundData.PartCancelRequest.SubOrders[0].BizSubOrderId)
case tao_vegetable.OrderStatusRefundSuccess: // 售后成功 case tao_vegetable.OrderStatusRefundSuccess: // 售后成功
refundData := msg.(*tao_vegetable.RefundOrderFinish) refundData := msg.(*tao_vegetable.RefundOrderFinish)
afsOrder, _ := partner.CurOrderManager.LoadAfsOrder(refundData.OutMainRefundId, model.VendorIDTaoVegetable) var refundAfs *domain591.AlibabaWdkOrderRefundGetOrderSyncRefundListResult
for i := 0; i < 4; i++ {
param := &request591.AlibabaWdkOrderRefundGetRequest{
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)),
ShopId: nil,
StoreId: utils.String2Pointer(refundData.StoreId),
RefundIds: &[]int64{utils.Str2Int64(refundData.BizSubRefundId)},
}
refundAfs, _ = getAPI("", 0, refundData.StoreId).QueryAfsOrderDetail(param)
if refundAfs.Orders != nil {
break
}
time.Sleep(time.Second * 1)
}
orders := *refundAfs.Orders
afsOrder, _ := partner.CurOrderManager.LoadAfsOrder(utils.Int64ToStr(*orders[0].OriginOrderId), model.VendorIDTaoVegetable)
if afsOrder != nil { if afsOrder != nil {
orderStatus.RefVendorOrderID = afsOrder.VendorOrderID orderStatus.RefVendorOrderID = afsOrder.VendorOrderID
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusRefundSuccess, "用户售后退款成功") orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusRefundSuccess, "用户售后退款成功")
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusRefundSuccess) orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusRefundSuccess)
orderStatus.StatusTime = time.Now() orderStatus.StatusTime = time.Now()
orderStatus.Remark = fmt.Sprintf("QueryTaoAfsOrderId:%s", refundData.BizSubRefundId) orderStatus.Remark = fmt.Sprintf("QueryTaoAfsOrderId:%s", refundData.BizSubRefundId)
orderStatus.VendorOrderID = refundData.OutMainRefundId orderStatus.VendorOrderID = utils.Int64ToStr(*orders[0].OriginOrderId)
} else { } else {
var refundAfs *domain591.AlibabaWdkOrderRefundGetOrderSyncRefundListResult
for i := 0; i < 4; i++ {
param := &request591.AlibabaWdkOrderRefundGetRequest{
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)),
ShopId: nil,
StoreId: utils.String2Pointer(refundData.StoreId),
RefundIds: &[]int64{utils.Str2Int64(refundData.BizSubRefundId)},
}
refundAfs, _ = getAPI("", 0, refundData.StoreId).QueryAfsOrderDetail(param)
if refundAfs.Orders != nil {
break
}
time.Sleep(time.Second * 1)
}
orders := *refundAfs.Orders
orderStatus.RefVendorOrderID = utils.Int64ToStr(*orders[0].OriginParentId) orderStatus.RefVendorOrderID = utils.Int64ToStr(*orders[0].OriginParentId)
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusRefundSuccess, "用户售中退款成功") orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusRefundSuccess, "用户售中退款成功")
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusRefundSuccess) orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusRefundSuccess)
orderStatus.StatusTime = time.Now() orderStatus.StatusTime = time.Now()
orderStatus.Remark = fmt.Sprintf("QueryTaoAfsOrderId:%s", refundData.BizSubRefundId) orderStatus.Remark = fmt.Sprintf("QueryTaoAfsOrderId:%s", refundData.BizSubRefundId)
orderStatus.VendorOrderID = *orders[0].OutMianOrderId orderStatus.VendorOrderID = utils.Int64ToStr(*orders[0].OriginOrderId)
taoRefundList = refundAfs.Orders taoRefundList = refundAfs.Orders
} }
@@ -502,17 +482,18 @@ func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *mod
db := dao.GetDB() db := dao.GetDB()
if approveType == partner.AfsApproveTypeRefused { if approveType == partner.AfsApproveTypeRefused {
param := &request3156.AlibabaTclsAelophyRefundDisagreeRequest{ param := &request3156.AlibabaTclsAelophyRefundDisagreeRequest{
RefundId: utils.String2Pointer(order.AfsOrderID), RefundId: utils.String2Pointer(order.VendorOrderID2),
RejectReason: utils.String2Pointer(reason), RejectReason: utils.String2Pointer(reason),
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)), OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)),
} }
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromAfsOrder(order), order.VendorStoreID).DisAgreeUserCancel(param) err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromAfsOrder(order), order.VendorStoreID).DisAgreeUserCancel(param)
//if err == nil { if err == nil {
// order.Status = model.AfsOrderStatusFailed order.Status = model.AfsOrderStatusFailed
// order.VendorStatus = "老板拒绝" order.VendorStatus = "老板拒绝"
// order.ReasonDesc += "," + reason order.Flag = model.AfsOrderFlagRefuseUserRefund
// dao.UpdateEntity(dao.GetDB(), order, "Status", "ReasonDesc", "VendorStatus") order.ReasonDesc += "," + reason
//} dao.UpdateEntity(dao.GetDB(), order, "Status", "ReasonDesc", "VendorStatus")
}
} else if approveType == partner.AfsApproveTypeRefusedToRefundMoney { } else if approveType == partner.AfsApproveTypeRefusedToRefundMoney {
return errors.New("此平台暂时不支持") return errors.New("此平台暂时不支持")
} else { } else {
@@ -523,31 +504,18 @@ func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *mod
param := &request3156.AlibabaTclsAelophyRefundAgreeRequest{ param := &request3156.AlibabaTclsAelophyRefundAgreeRequest{
StoreId: utils.String2Pointer(order.VendorStoreID), StoreId: utils.String2Pointer(order.VendorStoreID),
OutOrderId: utils.String2Pointer(orderDetail.VendorOrderID2), OutOrderId: utils.String2Pointer(orderDetail.VendorOrderID2),
RefundId: utils.String2Pointer(order.AfsOrderID), RefundId: utils.String2Pointer(order.VendorOrderID2),
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)), OrderFrom: utils.Int64ToPointer(utils.Str2Int64(tao_vegetable.TaoVegetableChannelCode)),
} }
// 加载购买商品
//sku, _ := dao.GetSimpleOrderSkus(db, order.VendorOrderID, nil)
//skuCount := 0
//for _, v := range sku {
// skuCount += v.Count
//}
//refundSkuCount := 0
subRefundList := make([]domain3156.AlibabaTclsAelophyRefundAgreeSubrefundlist, 0, len(afsSkuOrder)) subRefundList := make([]domain3156.AlibabaTclsAelophyRefundAgreeSubrefundlist, 0, len(afsSkuOrder))
for _, v := range afsSkuOrder { for _, v := range afsSkuOrder {
subRefundList = append(subRefundList, domain3156.AlibabaTclsAelophyRefundAgreeSubrefundlist{ subRefundList = append(subRefundList, domain3156.AlibabaTclsAelophyRefundAgreeSubrefundlist{
OutSubOrderId: utils.String2Pointer(v.VendorSubOrderID), OutSubOrderId: utils.String2Pointer(v.VendorSubOrderID),
RefundFee: utils.Int64ToPointer(v.UserMoney), RefundFee: utils.Int64ToPointer(v.UserMoney),
}) })
//refundSkuCount += v.Count
} }
// 全退退运费
//if skuCount == refundSkuCount {
// subRefundList[len(subRefundList)-1].RefundFee = utils.Int64ToPointer(*subRefundList[len(subRefundList)-1].RefundFee + orderDetail.BaseFreightMoney)
//}
param.SubRefundList = &subRefundList param.SubRefundList = &subRefundList
param.AuditMemo = utils.String2Pointer(fmt.Sprintf("商户同意退款")) param.AuditMemo = utils.String2Pointer(fmt.Sprintf("商户同意退款"))
if reason != "" { if reason != "" {

View File

@@ -401,7 +401,7 @@ func checkNameLength(name string, weight int, uint string) string {
if len(name) <= tao_vegetable.NameMaxLength { if len(name) <= tao_vegetable.NameMaxLength {
return name return name
} }
lastName = name
if strings.Contains(name, "(") { if strings.Contains(name, "(") {
startIndex := strings.Index(name, "(") startIndex := strings.Index(name, "(")
endIndex := strings.Index(name, ")") endIndex := strings.Index(name, ")")
@@ -452,6 +452,11 @@ func uploadImg(api *tao_vegetable.API, imgs []string) *string {
continue continue
} }
body, _ := ioutil.ReadAll(resp.Body) body, _ := ioutil.ReadAll(resp.Body)
// 图片失效
if strings.Contains(string(body), "Document not found") || len(body) == 0 {
continue
}
if newImg, _ := api.UploadImg(&request1475.AlibabaWdkPictureUploadRequest{ if newImg, _ := api.UploadImg(&request1475.AlibabaWdkPictureUploadRequest{
PictureCategoryId: utils.Int64ToPointer(0), PictureCategoryId: utils.Int64ToPointer(0),
Img: &body, Img: &body,

View File

@@ -747,7 +747,7 @@ func (c *StoreController) DeletePrinterSeq() {
// @Title 得到门店类别 // @Title 得到门店类别
// @Description 得到门店类别 // @Description 得到门店类别
// @Param token header string true "认证token" // @Param token header string false "认证token"
// @Param parentID query int false "父ID" // @Param parentID query int false "父ID"
// @Param level query int false "分类等级" // @Param level query int false "分类等级"
// @Param storeID query int true "门店ID" // @Param storeID query int true "门店ID"

View File

@@ -111,19 +111,21 @@ func (c *StoreSkuController) GetStoresSkus() {
} }
// 获取用户权限如果是普通用户不展示b2b相关目录如果是门店老板或者管理则展示全部 // 获取用户权限如果是普通用户不展示b2b相关目录如果是门店老板或者管理则展示全部
userAuth, err := auth2.GetTokenInfo(params.Token) userAuth, _ := auth2.GetTokenInfo(params.Token)
if err != nil {
return nil, "", err var userType int8 = 0
} if userAuth != nil {
user, total, err := dao.GetUsers(dao.GetDB(), 1, "", []string{userAuth.UserID}, nil, nil, 0, 1) user, total, err := dao.GetUsers(dao.GetDB(), 1, "", []string{userAuth.UserID}, nil, nil, 0, 1)
if err != nil { if err != nil {
return nil, "", err return nil, "", err
} }
if total != model.YES { if total != model.YES {
return nil, "", errors.New("未注册用户") return nil, "", errors.New("未注册用户")
} }
if user[0].Type != model.YES { userType = user[0].Type
return storeSku, "", nil if user[0].Type != model.YES {
return storeSku, "", nil
}
} }
// 判断门店是不是b2b门店如果是用户必须为系统管理员门店老板和运营人员 // 判断门店是不是b2b门店如果是用户必须为系统管理员门店老板和运营人员
@@ -144,7 +146,7 @@ func (c *StoreSkuController) GetStoresSkus() {
for _, v := range store { for _, v := range store {
for _, s := range storeSku.SkuNames { for _, s := range storeSku.SkuNames {
if v.ID == s.StoreID { if v.ID == s.StoreID {
if (v.BrandID == model.B2BNumberId || isMatterStore) && user[0].Type == model.YES { // 普通用户进入物料店和b2b店 if (v.BrandID == model.B2BNumberId || isMatterStore) && (userType == model.YES || userType == model.NO) { // 普通用户进入物料店和b2b店
continue continue
} else { } else {
result.TotalCount += len(s.Skus) result.TotalCount += len(s.Skus)