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() {
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 {
return
}
globals.SugarLogger.Debugf("GetStoresMapList ========== %s", utils.Format4Output(storeMaps, false))
timeStart := time.Now().Add(-72 * time.Hour)
startTime := time.Date(timeStart.Year(), timeStart.Month(), timeStart.Day(), 0, 0, 0, 0, timeStart.Location())
timeEnd := time.Now()
endTiem := time.Date(timeEnd.Year(), timeEnd.Month(), timeEnd.Day()-1, 23, 59, 59, 0, timeStart.Location())
for _, v := range storeMaps {
globals.SugarLogger.Debugf("=============UpdateTaoSettleInfo := %s", utils.Format4Output(v, false))
settleInfo, err := tao.GetOrderTotalShopMoney(v.VendorOrgCode, v.VendorStoreID, startTime, endTiem)
if err != nil {
globals.SugarLogger.Errorf("获取淘鲜达结算信息异常 := %v", err)
@@ -2707,6 +2708,7 @@ func UpdateTaoSettleInfo() {
}
for orderId2, settle := range settleInfo {
globals.SugarLogger.Debugf("=============settleInfo := %s,%s", utils.Format4Output(orderId2, false), settle)
goodsOrder, err := partner.CurOrderManager.LoadOrder2(orderId2, model.VendorIDTaoVegetable)
if err != nil || goodsOrder == nil {
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) {
order := savedOrderInfo.order
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 {
order.DeliveryFlag |= model.OrderDeliveryFlagMaskAutoPickup
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 {
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 {
return storeCatMaps, 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 {
// return storeCatMaps, err
//}
//表示没有门店分类
if len(storeCatMaps) == 0 {
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 {
flag, _ := doStoreSkuAudit(ctx, storeIDs, skuBindInfos)
globals.SugarLogger.Debugf("========falg := %s", utils.Format4Output(flag, false))
if !flag {
var num int64
db := dao.GetDB()
@@ -5941,6 +5942,7 @@ func doStoreSkuAudit(ctx *jxcontext.Context, storeIDs []int, skuBindInfos []*Sto
return false, err
}
}
storeSkuAudit := &model.StoreSkuAudit{
StoreID: storeID,
NameID: skuBindInfo.NameID,

View File

@@ -203,10 +203,10 @@ func Init() {
"09:35:00",
})
/// 更新淘鲜达结算信息
ScheduleTimerFunc("UpdateTiktokShopTotalMoney", func() {
ScheduleTimerFunc("UpdateTaoTotalMoney", func() {
orderman.UpdateTaoSettleInfo()
}, []string{
"23:20:00",
"17:35:00",
})
// 每分钟轮询一次,推送骑手信息
@@ -282,149 +282,338 @@ func Init() {
// 淘鲜达更新门店商品 ,接口收费暂不使用
if beego.BConfig.RunMode != "jxgy" {
ScheduleTimerFunc("RefreshSyncSkuList_tao", func() {
var beijin = []int{
//102683,
//102542,
//102514,
//102382,
//102182,
//102178,
//102173,
//102098,
//102094,
//102080,
//102072,
//102069,
//101870,
//101869,
//101868,
//101867,
//101866,
//101865,
//100956,
//100930,
//100871,
//100786,
//100746,
//100744,
//100726,
//100705,
//100400,
//100111,
//100108,
//100106,
//100104,
//100103,
//100102,
//100100,
//100097,
//100096,
//100095,
//100093,
//100092,
//100089,
//100087,
//100086,
//100085,
//100082,
//100079,
//100078,
//669158,
//668691,
//668673,
//668282,
//667447,
//667354,
//667321,
//667319,
//667316,
//667269,
//667268,
//667267,
//667260,
//667132,
//667094,
//667030,
//666965,
//666714,
//666708,
//666705,
//103437,
//103349,
//103123,
//103121,
//103106,
//103038,
//103028,
//103019,
//102831,
//102751,
//上海
668462,
668276,
668180,
667320,
667237,
667231,
667068,
667036,
666678,
103191,
103074,
103065,
103051,
103050,
103037,
103029,
103018,
103002,
102999,
102969,
102966,
102951,
102946,
102939,
102938,
102934,
102933,
102930,
102924,
102920,
102908,
102903,
102561,
102293,
100946,
100945,
100943,
100935,
100905,
100720,
100325,
100324,
100309,
100299,
100296,
100292,
100290,
var hangzhou = []int{
// 杭州
//669073,
//668930,
//668922,
//668916,
//668915,
//668756,
//668705,
//668702,
//668681,
//668422,
//668417,
//668191,
//667996,
//667991,
//667985,
//667553,
//667044,
//103083,
//103073,
//103033,
//103032,
//102963,
//102923,
//102785,
//102594,
//102578,
//102329,
//101734,
//100229,
//100224,
//100217,
//100215,
//100210,
//100206,
//// 武汉
//668352, 103200, 102958, 100887, 100236,
//// 广州
668871, 668602, 668575, 668262, 103425, 101755, 101176, 100557, 100369, 100361, 100351, 100350,
//成都
669172,
669171,
669170,
669169,
669168,
669165,
669164,
669163,
669162,
669157,
669156,
669155,
669154,
669153,
669150,
669149,
669148,
669147,
669146,
669144,
669141,
669139,
669138,
669137,
669134,
669132,
669127,
669124,
669122,
669121,
669120,
669119,
669114,
669113,
669111,
669110,
669109,
669108,
669107,
669106,
669103,
669100,
669099,
669098,
669097,
669096,
669095,
669094,
669093,
669092,
669091,
669087,
669086,
669085,
669084,
669083,
669082,
669079,
669078,
669077,
669075,
669074,
669072,
669070,
669067,
669064,
669063,
669062,
669060,
669059,
669056,
669055,
669054,
669050,
669049,
669047,
669046,
669045,
669042,
669041,
669038,
669036,
669035,
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{
"00:30:00",
"01:30:00",
"02:30:00",
"03:30:00",
"04:30:00",
"05:30:00",
"06:30:00",
"07:30:00",
"09:00:00",
"10:40:00",
"12:55:00",
"08:30:00",
"09:35:00",
"10:30:00",
"11:30:00",
"12:30:00",
"13:30:00",
"14:30:00",
"15:30:00",
"16:30:00",
"17:30:00",
"18:40:00",
"18:30:00",
"19:30:00",
"20:30:00",
"21:30:00",
"22:30:00",
"23:30:00",
})
}
@@ -754,9 +943,6 @@ func syncStoreSku() {
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() {
//syncFlag := 0 | model.SyncFlagSaleMask
syncFlag := 0
@@ -795,8 +981,8 @@ func syncStoreSkuTao(beijin []int) {
switch step {
case 0:
if beego.BConfig.RunMode != "jxgy" {
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "2452A93EEB9111EC9B06525400E86DC0", "淘鲜达消息:", utils.Format4Output(beijin[syncLen:syncLen+5], false))
_, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{model.VendorIDTaoVegetable}, beijin[syncLen:syncLen+5], false, nil, nil, syncFlag, true, true)
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+3], false, nil, nil, syncFlag, true, true)
errList.AddErr(err)
}
case 1:
@@ -807,7 +993,7 @@ func syncStoreSkuTao(beijin []int) {
return retVal, err
}, []int{0, 1})
tasksch.HandleTask(task, nil, true).Run()
syncLen += 5
syncLen += 3
}
func doDailyWork2() {

View File

@@ -3,7 +3,6 @@ package netspider
import (
"testing"
"git.rosy.net.cn/jx-callback/business/jxutils/ditu"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/baseapi/utils"
@@ -16,21 +15,6 @@ func 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) {
shopList, err := GetCityShops(jxcontext.AdminCtx, nil, []int{0, 3}, 510100, 5000, 3000)
if err != nil {

View File

@@ -207,7 +207,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
case model.VendorIDMTWM: // 美团订单
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)
globals.SugarLogger.Debugf("Error pushing meituan rider information :%s--%s--%v", v.VendorOrderID, utils.Format4Output(riderInfo, false), err)
}
}
case model.VendorIDELM: // 饿了么
@@ -233,7 +233,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
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)
globals.SugarLogger.Debugf("Error pushing meituan rider information :%s--%s--%v", v.VendorOrderID, utils.Format4Output(riderInfo, false), err)
}
}
} else { // 订单状态改变 [配送中/用户签收/用户拒收]
@@ -243,7 +243,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
}
}
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
}
}

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) {
isSelfDelivery = model.IsOrderDeliveryByStore(order) || model.IsOrderDeliveryBySelf(order)
if !isSelfDelivery && globals.EnableJdStoreWrite {
_, err = getAPI(order.VendorOrgCode).OrderJDZBDelivery(order.VendorOrderID, userName)
} 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) {
isSelfDelivery = model.IsOrderDeliveryByStore(order) || model.IsOrderDeliveryBySelf(order)
if !isSelfDelivery {
if globals.EnableMtwmStoreWrite {
// 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) {
param, err := orderStatusChangeNotice(order, tao_vegetable.OrderStatusCallRider)
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())
return err
}
return err
return nil
}
// Swtich2SelfDelivered 订单送达
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 自配送订单配送中

View File

@@ -82,60 +82,38 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
queryOrderDetailParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
StoreId: utils.String2Pointer(refundData.StoreId),
}}
order, err := partner.CurOrderManager.LoadOrder2(refundData.OutOrderId, model.VendorIDTaoVegetable)
if err != nil {
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))
queryOrderDetailParam.OrderGetRequest.BizOrderId = utils.Int64ToPointer(utils.Str2Int64(orderStatus.RefVendorOrderID))
skuList, err := api.QueryOrderDetail(queryOrderDetailParam)
if err != nil {
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 { // 本次退款订单
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
for _, sku := range *skuList.SubOrderResponseList { // 总订单
if refundSku.OutSubOrderId == *sku.OutSubOrderId {
@@ -152,26 +130,42 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
afsOrder.PmSkuSubsidyMoney += orderSku.PmSkuSubsidyMoney
afsOrder.Skus = append(afsOrder.Skus, orderSku)
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 {
afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt
}
orderStatus.RefVendorOrderID = afsOrder.VendorOrderID
orderStatus.VendorOrderID = afsOrder.AfsOrderID
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
}
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 {
globals.SugarLogger.Debugf("用户取消售后单,获取之前生成的售后单失败")
return tao_vegetable.CallBackResultInfo(err)
@@ -180,27 +174,27 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
cancelMsg := msg.(*tao_vegetable.UserCancelRefundApply)
for _, v := range afsOrder {
// 商家驳回,会发出用户撤销的回调通知,不管他
if v.AfsOrderID == cancelMsg.RefundId && v.Flag == model.AfsOrderFlagRefuseUserRefund {
return tao_vegetable.CallBackResultInfo(nil)
if v.VendorOrderID2 != cancelMsg.RefundId {
continue
}
// 用户撤销未处理的售后订单
if v.AfsOrderID == cancelMsg.RefundId && v.Flag == 0 {
if v.Flag == 0 {
// 下面处理用户撤销售后
if err = utils.CallFuncLogError(func() error {
_, err = dao.DeleteEntity(db, v, "VendorOrderID", "VendorID")
_, err = dao.DeleteEntity(db, v, "VendorOrderID", "AfsOrderID", "VendorID")
return err
}, "SaveAfsOrder delete AfsOrder, afsOrderID:%s", v.AfsOrderID); err != nil {
return tao_vegetable.CallBackResultInfo(err)
}
// 删除售后商品
if err = utils.CallFuncLogError(func() error {
_, err = dao.DeleteEntity(db, &model.OrderSkuFinancial{
VendorOrderID: v.VendorOrderID,
VendorID: v.VendorID,
IsAfsOrder: 1,
}, "VendorOrderID", "VendorID", "IsAfsOrder")
AfsOrderID: v.AfsOrderID,
}, "VendorOrderID", "VendorID", "IsAfsOrder", "AfsOrderID")
return err
}, "SaveAfsOrder delete OrderSkuFinancial, afsOrderID:%s", v.AfsOrderID); err != nil {
return tao_vegetable.CallBackResultInfo(err)
@@ -212,6 +206,7 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
// 你这边没有响应那么就不会退钱给用户,就会造成客诉。为什么不接售中取消呢
case tao_vegetable.OrderStatusOnSaleCancel:
onSaleMsg := msg.(*tao_vegetable.OnSaleCancel)
globals.SugarLogger.Debugf("=========售中取消: %s", utils.Format4Output(msg, false))
var afsOrder *model.AfsOrder
var api = getAPI("", 0, onSaleMsg.PartCancelRequest.StoreId)
queryOrderDetailParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
@@ -223,75 +218,78 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
return tao_vegetable.CallBackResultInfo(err)
}
afsOrder = &model.AfsOrder{
VendorID: model.VendorIDTaoVegetable,
AfsOrderID: onSaleMsg.PartCancelRequest.IdempotentId,
VendorOrderID: orderStatus.RefVendorOrderID,
VendorStoreID: onSaleMsg.PartCancelRequest.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 _, v1 := range onSaleMsg.PartCancelRequest.SubOrders {
afsOrder = &model.AfsOrder{
VendorID: model.VendorIDTaoVegetable,
AfsOrderID: utils.Int64ToStr(v1.BizSubOrderId),
VendorOrderID: orderStatus.RefVendorOrderID,
VendorStoreID: onSaleMsg.PartCancelRequest.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 // 退货状态
ifAfsTypeFullRefund := false
var refundFee int64 = 0
for _, v := range *orderDetail.SubOrderResponseList {
for _, v2 := range onSaleMsg.PartCancelRequest.SubOrders {
if *v.BizSubOrderId == v2.BizSubOrderId {
orderSku := &model.OrderSkuFinancial{
Count: utils.Float64TwoInt(*v.BuySaleQuantity),
VendorSkuID: *v.SkuCode,
SkuID: utils.Str2Int(*v.SkuCode),
Name: *v.SkuName,
UserMoney: *v.OriginalFee,
PmSkuSubsidyMoney: *v.DiscountPlatformFee, // 平台补贴商品
VendorOrderID: orderStatus.VendorOrderID,
VendorSubOrderID: *v.OutSubOrderId,
ifAfsTypeFullRefund := false
var refundFee int64 = 0
for _, v := range *orderDetail.SubOrderResponseList {
for _, v2 := range onSaleMsg.PartCancelRequest.SubOrders {
if *v.BizSubOrderId == v2.BizSubOrderId {
orderSku := &model.OrderSkuFinancial{
Count: utils.Float64TwoInt(*v.BuySaleQuantity),
VendorSkuID: *v.SkuCode,
SkuID: utils.Str2Int(*v.SkuCode),
Name: *v.SkuName,
UserMoney: *v.OriginalFee,
PmSkuSubsidyMoney: *v.DiscountPlatformFee, // 平台补贴商品
VendorOrderID: orderStatus.VendorOrderID,
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) {
ifAfsTypeFullRefund = true
if len(onSaleMsg.PartCancelRequest.SubOrders) == len(*orderDetail.SubOrderResponseList) {
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:
globals.SugarLogger.Debugf("=========售后成功: %s", utils.Format4Output(msg, false))
// 用户退款成功回调,缺货拣货时,送达回触发.此时并没有售后单
if scarceGoods != nil {
refundSuccess := msg.(*tao_vegetable.RefundOrderFinish)
var afsOrder *model.AfsOrder
var api = getAPI("", 0, refundSuccess.StoreId)
var isCreate = true
var outMainRefundIds = make(map[string]int64, 0)
detail, err := api.QueryAfsOrderDetail(&request591.AlibabaWdkOrderRefundGetRequest{
OrderFrom: utils.Int64ToPointer(tao_vegetable.ChannelCome),
ShopId: nil,
@@ -301,84 +299,70 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
if err != nil {
return tao_vegetable.CallBackResultInfo(err)
}
finalList, _ := dao.GetOrderRefundSkuList(db, []string{refundSuccess.OutMainRefundId})
if len(finalList) != model.NO {
for _, f := range finalList {
for _, a := range *detail.Orders {
if f.SkuID == utils.Str2Int(*a.ItemCode) {
isCreate = false // 本地已经存在了记录
outMainRefundIds[*a.OutMainRefundId] = *a.RefundAmount
for _, v := range *detail.Orders {
afs, _ := partner.CurOrderManager.LoadAfsOrder(utils.Int64ToStr(*v.OriginOrderId), model.VendorIDTaoVegetable)
if afs != nil {
afsOrder = &model.AfsOrder{
VendorID: model.VendorIDTaoVegetable,
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)
}
}
}
}
// 本地已经存在了售后记录,直接修改售后状态,否则创建售后记录
if !isCreate {
for afsOrderId, afsMoney := range outMainRefundIds {
afs, _ := partner.CurOrderManager.LoadAfsOrder(afsOrderId, model.VendorIDTaoVegetable)
} else {
afs.VendorOrderID2 = refundSuccess.BizSubRefundId
afs.AfsFinishedAt = time.Now()
afs.Status = model.AfsOrderStatusFinished
afs.AfsTotalShopMoney = afsMoney
afs.AfsTotalShopMoney = *v.RefundAmount
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:
@@ -418,66 +402,62 @@ func (c *PurchaseHandler) callbackAfsMsg2Status(status string, msg interface{})
switch status {
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 = time.Now()
orderStatus.Remark = refundData.Remarks
orderStatus.VendorOrderID = refundData.RefundId
order, _ := partner.CurOrderManager.LoadOrder2(orderStatus.RefVendorOrderID, model.VendorIDTaoVegetable)
if order != nil {
orderStatus.RefVendorOrderID = order.VendorOrderID
}
//orderStatus.VendorOrderID = refundData.RefundId
order, _ := partner.CurOrderManager.LoadOrder2(refundData.OutOrderId, model.VendorIDTaoVegetable)
orderStatus.RefVendorOrderID = order.VendorOrderID
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 = time.Now()
orderStatus.VendorOrderID = refundData.RefundId
order, _ := partner.CurOrderManager.LoadOrder2(orderStatus.RefVendorOrderID, model.VendorIDTaoVegetable)
if order != nil {
orderStatus.RefVendorOrderID = order.VendorOrderID
}
order, _ := partner.CurOrderManager.LoadOrder2(refundData.OutOrderId, model.VendorIDTaoVegetable)
orderStatus.RefVendorOrderID = order.VendorOrderID
case tao_vegetable.OrderStatusOnSaleCancel:
refundData := msg.(*tao_vegetable.OnSaleCancel)
orderStatus.RefVendorOrderID = utils.Int64ToStr(refundData.PartCancelRequest.BizOrderId)
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusOnSaleCancel, "用户售中取消")
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusOnSaleCancel)
orderStatus.StatusTime = time.Now()
//orderStatus.VendorOrderID = refundData.IdempotentId
orderStatus.VendorOrderID = utils.Int64ToStr(refundData.PartCancelRequest.SubOrders[0].BizSubOrderId)
case tao_vegetable.OrderStatusRefundSuccess: // 售后成功
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 {
orderStatus.RefVendorOrderID = afsOrder.VendorOrderID
orderStatus.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusRefundSuccess, "用户售后退款成功")
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusRefundSuccess)
orderStatus.StatusTime = time.Now()
orderStatus.Remark = fmt.Sprintf("QueryTaoAfsOrderId:%s", refundData.BizSubRefundId)
orderStatus.VendorOrderID = refundData.OutMainRefundId
orderStatus.VendorOrderID = utils.Int64ToStr(*orders[0].OriginOrderId)
} 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.VendorStatus = fmt.Sprintf("%s:%s", tao_vegetable.OrderStatusRefundSuccess, "用户售中退款成功")
orderStatus.Status = c.GetAfsStatusFromVendorStatus(tao_vegetable.OrderStatusRefundSuccess)
orderStatus.StatusTime = time.Now()
orderStatus.Remark = fmt.Sprintf("QueryTaoAfsOrderId:%s", refundData.BizSubRefundId)
orderStatus.VendorOrderID = *orders[0].OutMianOrderId
orderStatus.VendorOrderID = utils.Int64ToStr(*orders[0].OriginOrderId)
taoRefundList = refundAfs.Orders
}
@@ -502,17 +482,18 @@ func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *mod
db := dao.GetDB()
if approveType == partner.AfsApproveTypeRefused {
param := &request3156.AlibabaTclsAelophyRefundDisagreeRequest{
RefundId: utils.String2Pointer(order.AfsOrderID),
RefundId: utils.String2Pointer(order.VendorOrderID2),
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")
//}
if err == nil {
order.Status = model.AfsOrderStatusFailed
order.VendorStatus = "老板拒绝"
order.Flag = model.AfsOrderFlagRefuseUserRefund
order.ReasonDesc += "," + reason
dao.UpdateEntity(dao.GetDB(), order, "Status", "ReasonDesc", "VendorStatus")
}
} else if approveType == partner.AfsApproveTypeRefusedToRefundMoney {
return errors.New("此平台暂时不支持")
} else {
@@ -523,31 +504,18 @@ func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *mod
param := &request3156.AlibabaTclsAelophyRefundAgreeRequest{
StoreId: utils.String2Pointer(order.VendorStoreID),
OutOrderId: utils.String2Pointer(orderDetail.VendorOrderID2),
RefundId: utils.String2Pointer(order.AfsOrderID),
RefundId: utils.String2Pointer(order.VendorOrderID2),
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))
for _, v := range afsSkuOrder {
subRefundList = append(subRefundList, domain3156.AlibabaTclsAelophyRefundAgreeSubrefundlist{
OutSubOrderId: utils.String2Pointer(v.VendorSubOrderID),
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.AuditMemo = utils.String2Pointer(fmt.Sprintf("商户同意退款"))
if reason != "" {

View File

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

View File

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

View File

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