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

This commit is contained in:
richboo111
2023-12-13 09:24:17 +08:00
19 changed files with 208 additions and 67 deletions

View File

@@ -944,6 +944,7 @@ func (c *OrderManager) addOrderStatus(orderStatus *model.OrderStatus, db *dao.Da
if db == nil {
db = dao.GetDB()
}
isDuplicated, err = addOrderOrWaybillStatus(orderStatus, db)
if err == nil && !isDuplicated && (orderStatus.Status != model.OrderStatusUnknown && orderStatus.Status != model.OrderStatusMsg) {
// todo 加这个代码的原因是,抖店运单取消会去将本地的订单状态设置为取消,跳过,不修改本地订单状态
@@ -994,6 +995,7 @@ func (c *OrderManager) addOrderStatus(orderStatus *model.OrderStatus, db *dao.Da
updateFields = append(updateFields, "LockStatus", "LockStatusTime", "Flag")
}
}
utils.CallFuncLogError(func() error {
_, err = db.Db.Update(order, updateFields...)
return err
@@ -1010,6 +1012,7 @@ func (c *OrderManager) addOrderStatus(orderStatus *model.OrderStatus, db *dao.Da
}
}
}
return isDuplicated, order, err
}
@@ -2655,7 +2658,7 @@ func UpdateTiktokShopTotalMoney() {
var goodsOrders []*model.GoodsOrder
sql := `SELECT g.* FROM goods_order g WHERE g.order_created_at >= ? AND g.status = ? AND g.vendor_id = ? AND total_shop_money = ? ORDER BY g.order_created_at desc`
orderCreateTime := time.Now().AddDate(0, 0, -15)
orderCreateTime := time.Now().AddDate(0, 0, -50)
param := []interface{}{orderCreateTime, model.OrderStatusFinished, model.VendorIDDD, model.NO}
if err := dao.GetRows(db, &goodsOrders, sql, param...); err != nil {
globals.SugarLogger.Debugf("Update GoodsOrder Total shop money err %s", err)
@@ -2695,6 +2698,7 @@ func UpdateTiktokShopTotalMoney() {
}
}
}
globals.SugarLogger.Debugf("vendorOrderId =========: %s , TotalShopMoney := %d", v.VendorOrderID, v.TotalShopMoney)
if _, err := dao.UpdateEntity(db, v, "TotalShopMoney", "NewEarningPrice"); err != nil {
globals.SugarLogger.Errorf("更新本地订单结算信息错误 : %s", err)
continue

View File

@@ -928,12 +928,41 @@ func StoreOpenAll(ctx *jxcontext.Context) {
// globals.SugarLogger.Debug("StoreOpenAll skuID is Complete")
//}
// 对比本地商品和平台商品差异(价格和规格),不同的重新同步
func CheckSkuDiffBetweenJxAndVendor2(ctx *jxcontext.Context, vendorIDList []int, storeIDList []int) {
//db := dao.GetDB()
// CheckSkuDiffBetweenJxAndVendor2 对比本地商品和平台商品差异(价格和规格),不同的重新同步
func CheckSkuDiffBetweenJxAndVendor2(ctx *jxcontext.Context, vendorIDList []int, storeIDList []int) error {
//var (
// db = dao.GetDB()
// errList = make([]error, 0, 0)
//)
//for _, v := range storeIDList {
// //storeMapList, err := dao.GetStoresMapList(db, vendorIDList, []int{v}, []int{model.StoreStatusOpened, model.StoreStatusHaveRest, model.StoreStatusClosed}, status, model.StoreIsSyncYes, "", "", "")
// // 1.判断本地门店是否开启了同步,未开启的跳过
// storeMapList, err := dao.GetStoresMapList(db, vendorIDList, []int{v}, []int{model.StoreStatusOpened, model.StoreStatusHaveRest, model.StoreStatusClosed}, model.StoreStatusOpened, model.StoreIsSyncYes, "", "", "")
// if err != nil {
// errList = append(errList, fmt.Errorf("门店id[%d]查询异常:%v", v, err))
// continue
// }
// if len(storeMapList) == model.NO {
// errList = append(errList, fmt.Errorf("门店id[%d],未绑定平台账号或者同步未打开", v))
// continue
// }
// // 2.查询本地商品列表,存储sku_id,vendor_price,weight
// skuList, skuErr := dao.GetStoreSkuBindPriceAndWeight(db, v)
// if len(skuList) == model.NO || skuErr != nil {
// errList = append(errList, fmt.Errorf("门店id[%d],商品为空或错误:%v", v, skuErr))
// continue
// }
//
// // 查询平台门店所有商品
// for _, storeMap := range storeMapList {
// singleStoreHandler := partner.GetPurchasePlatformFromVendorID(storeMap.VendorID).(partner.ISingleStoreStoreSkuHandler)
// // 淘宝需要storeSkuList有值
// vendorSkuInfoList, err := singleStoreHandler.GetStoreSkusFullInfo(ctx, nil, v, storeMap.VendorStoreID, nil)
//
// }
// // 3.比对价格和规格重量,不同的以本地为基础开始重新同步
//
//}
return nil
}
//入口函数,校验本地商品京西和其他平台的差异

View File

@@ -45,7 +45,7 @@ func CopyOnStoreSkuToOther(ctx *jxcontext.Context, fromVendorStoreId, toStoreId
switch step {
case 1:
// 1.加载门店商品,删除商品.当分类下没有商品时.删除分类
//errs := LoadingStoreSkuList(ctx, toApi, toStore.VendorStoreID)
// errs := LoadingStoreSkuList(ctx, toApi, toStore.VendorStoreID)
//if errs != nil && len(errs) > 0 {
// return nil, errs[0]
//}

View File

@@ -194,8 +194,16 @@ func Init() {
ScheduleTimerFunc("UpdateTiktokShopTotalMoney", func() {
orderman.UpdateTiktokShopTotalMoney()
}, []string{
"03:35:00",
"11:05:00",
"03:00:00",
"05:00:00",
"07:00:00",
"09:00:00",
"11:00:00",
"14:00:00",
"16:00:00",
"19:00:00",
"21:00:00",
"01:00:00",
})
/// 更新淘鲜达结算信息
ScheduleTimerFunc("UpdateTaoTotalMoney", func() {

View File

@@ -2105,3 +2105,35 @@ func GetStoresSkusForManageState(db *DaoDB, storeID, status int) (storeSkuList [
err = GetRows(db, &storeSkuList, sql, sqlParams...)
return storeSkuList, err
}
type SkuPriceAndWeight struct {
SkuId int64 `orm:"column(sku_id)" json:"skuId"` // 商品本地id
MtwmPrice int64 `orm:"column(mtwm_price)" json:"mtwmPrice"` // 美团平台价
JdPrice int64 `orm:"column(jd_price)" json:"jdPrice"` // 京东平台价
EbaiPrice int64 `orm:"column(ebai_price)" json:"ebaiPrice"` // 饿百平台价
TaoPrice int64 `orm:"column(tao_price)" json:"taoPrice"` // 淘宝平台价
DdPrice int64 `orm:"column(dd_price)" json:"ddPrice"` // 抖店平台价
Weight int64 `orm:"column(weight)" json:"weight"` // 商品规格重量
}
// GetStoreSkuBindPriceAndWeight 获取门店绑定商品平台价格和规格
func GetStoreSkuBindPriceAndWeight(db *DaoDB, storeId int) (skuList map[string]*SkuPriceAndWeight, err error) {
sql := ` SELECT b.sku_id,b.mtwm_price,b.jd_price,b.ebai_price,b.tao_price,b.dd_price,s.weight FROM store_sku_bind b
INNER JOIN sku s ON s.id = b.sku_id
WHERE b.store_id = ? AND b.deleted_at = ?
`
result := make([]*SkuPriceAndWeight, 0, 0)
sqlParams := []interface{}{storeId, utils.DefaultTimeValue}
if err = GetRows(db, &result, sql, sqlParams...); err != nil {
return nil, err
}
if len(result) != model.NO {
skuMap := make(map[string]*SkuPriceAndWeight, 0)
for _, v := range result {
skuMap[utils.Int64ToStr(v.SkuId)] = v
}
return skuMap, nil
}
return nil, errors.New("门店不存在商品数据")
}

View File

@@ -117,7 +117,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap
switch order.OrderVendorID {
case model.VendorIDDD:
Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2)
tiktokStatusPush(order, msg.OrderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat))
tiktokStatusPush(order, msg.OrderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), goodsOrder.VendorOrgCode)
case model.VendorIDMTWM, model.VendorIDTaoVegetable:
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
if goodsOrder.VendorID == model.VendorIDTaoVegetable && msg.OrderStatus == dadaapi.OrderStatusAccepted {
@@ -129,7 +129,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap
}
// 抖音订单状态回传
func tiktokStatusPush(order *model.Waybill, status int, lng, lat string) {
func tiktokStatusPush(order *model.Waybill, status int, lng, lat, vendorOrgCode string) {
result := &utils.RiderInfo{
OrderId: order.VendorOrderID,
ThirdCarrierOrderId: order.VendorOrderID,
@@ -177,7 +177,7 @@ func tiktokStatusPush(order *model.Waybill, status int, lng, lat string) {
result.LogisticsStatus = 0
result.LogisticsContext = model.RiderGetOrderDeliverOther
}
delivery.PullTiktokRiderInfo(result)
delivery.PullTiktokRiderInfo(result, vendorOrgCode)
}
func (c *DeliveryHandler) callbackMsg2Waybill(msg *dadaapi.CallbackMsg) (retVal *model.Waybill, goods *model.GoodsOrder) {

View File

@@ -311,7 +311,7 @@ func OnWaybillMsg(msg *fnpsapi.OrderStatusNottify, resultParam *fnpsapi.ShortSta
switch order.OrderVendorID {
case model.VendorIDDD:
Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2)
tiktokStatusPush(order, orderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat))
tiktokStatusPush(order, orderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), order.VendorOrgCode)
case model.VendorIDMTWM, model.VendorIDTaoVegetable:
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
if good.VendorID == model.VendorIDTaoVegetable && cc.OrderStatus == fnpsapi.OrderStatusAssigned {
@@ -322,7 +322,7 @@ func OnWaybillMsg(msg *fnpsapi.OrderStatusNottify, resultParam *fnpsapi.ShortSta
}
// 抖音订单状态回传
func tiktokStatusPush(order *model.Waybill, orderStatus int64, lng, lat string) {
func tiktokStatusPush(order *model.Waybill, orderStatus int64, lng, lat, vendorOrgCode string) {
result := &utils.RiderInfo{
OrderId: order.VendorOrderID,
ThirdCarrierOrderId: order.VendorOrderID,
@@ -361,7 +361,7 @@ func tiktokStatusPush(order *model.Waybill, orderStatus int64, lng, lat string)
result.LogisticsStatus = 0
result.LogisticsContext = model.RiderGetOrderDeliverOther
}
delivery.PullTiktokRiderInfo(result)
delivery.PullTiktokRiderInfo(result, vendorOrgCode)
}
// 异常报备

View File

@@ -142,7 +142,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m
switch order.OrderVendorID {
case model.VendorIDDD:
Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2)
pushMTPSToTiktok(msg.Status, order, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat))
pushMTPSToTiktok(msg.Status, order, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), goodsOrder.VendorOrgCode)
case model.VendorIDMTWM, model.VendorIDTaoVegetable:
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
if goodsOrder.VendorID == model.VendorIDTaoVegetable && msg.Status == mtpsapi.OrderStatusAccepted {
@@ -153,7 +153,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m
return err
}
func pushMTPSToTiktok(msgStatus int, order *model.Waybill, lng, lat string) {
func pushMTPSToTiktok(msgStatus int, order *model.Waybill, lng, lat, vendorOrgCode string) {
result := &utils.RiderInfo{
OrderId: order.VendorOrderID,
ThirdCarrierOrderId: order.VendorOrderID,
@@ -186,11 +186,12 @@ func pushMTPSToTiktok(msgStatus int, order *model.Waybill, lng, lat string) {
result.LogisticsStatus = 0
result.LogisticsContext = model.RiderGetOrderDeliverOther
}
delivery.PullTiktokRiderInfo(result)
if result.LogisticsStatus == model.WaybillStatusCourierArrived {
result.LogisticsStatus = model.WaybillStatusDelivering
result.LogisticsContext = model.RiderGetOrderDelivering
delivery.PullTiktokRiderInfo(result)
delivery.PullTiktokRiderInfo(result, vendorOrgCode)
} else {
delivery.PullTiktokRiderInfo(result, vendorOrgCode)
}
}

View File

@@ -230,7 +230,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
case model.VendorIDWSC: // 微盟微商城
continue
case model.VendorIDDD: // 抖店小时达
riderInfo.LogisticsProviderCode = utils.JxVendorId2TiktokCode(v.WaybillVendorID)
riderInfo.LogisticsProviderCode = tiktok_api.JxVendorId2TiktokCode(v.WaybillVendorID)
riderInfo.ThirdCarrierOrderId = v.VendorOrderID
if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil {
if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorStoreID, utils.Struct2Map(riderInfo, "", true)); err != nil {
@@ -261,7 +261,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
return
}
func PullTiktokRiderInfo(riderInfo *utils.RiderInfo) {
func PullTiktokRiderInfo(riderInfo *utils.RiderInfo, vendorOrgCode string) {
switch riderInfo.LogisticsStatus {
case 5: // 呼叫骑手
riderInfo.LogisticsStatus = 0
@@ -304,7 +304,7 @@ func PullTiktokRiderInfo(riderInfo *utils.RiderInfo) {
// 抖店由于发配送时运单id已经固定了,我们系统在重新发货,或者运单号发生改变时去推送信息时.抖店只识别第一个运单号所以在这儿修改成发单时的第一个运单号!
paramsMap := utils.Struct2Map(riderInfo, "", true)
if handler := partner.GetPurchaseOrderHandlerFromVendorID(model.VendorIDDD); handler != nil {
if err := handler.GetOrderRider("", "", paramsMap); err != nil {
if err := handler.GetOrderRider(vendorOrgCode, "", paramsMap); err != nil {
globals.SugarLogger.Errorf("PullTiktokRiderInfo Err %s", err.Error())
}
}
@@ -439,7 +439,7 @@ func UpdateFakeWayBillToTiktok() {
if riderInfo.LogisticsContext != model.RiderGetOrderDeliverFailed && riderInfo.LogisticsContext != model.RiderGetOrderDeliverOther && riderInfo.LogisticsContext != model.RiderWaitRider {
riderInfo.LogisticsContext = fmt.Sprintf(riderInfo.LogisticsContext, riderInfo.CourierName, riderInfo.CourierPhone)
}
riderInfo.LogisticsProviderCode = utils.JxVendorId2TiktokCode(fakeWayBill[i].WaybillVendorID)
riderInfo.LogisticsProviderCode = tiktok_api.JxVendorId2TiktokCode(fakeWayBill[i].WaybillVendorID)
// 推送骑手信息
paramsMap := utils.Struct2Map(riderInfo, "", true)

View File

@@ -441,7 +441,7 @@ func OnWaybillMsg(urlIndex string, msg interface{}) (resp *sfps2.CallbackRespons
switch order.OrderVendorID {
case model.VendorIDDD:
Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2)
tiktokStatusPush(order, orderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat))
tiktokStatusPush(order, orderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), good.VendorOrgCode)
case model.VendorIDTaoVegetable, model.VendorIDMTWM:
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
if good.VendorID == model.VendorIDTaoVegetable && orderStatus == sfps2.OrderStatusTakeOrder {
@@ -451,7 +451,7 @@ func OnWaybillMsg(urlIndex string, msg interface{}) (resp *sfps2.CallbackRespons
return sfps2.Err2CallbackResponse(nil)
}
func tiktokStatusPush(order *model.Waybill, orderStatus int64, lng, lat string) {
func tiktokStatusPush(order *model.Waybill, orderStatus int64, lng, lat, vendorOrgCode string) {
result := &utils.RiderInfo{
OrderId: order.VendorOrderID,
ThirdCarrierOrderId: order.VendorOrderID,
@@ -489,7 +489,7 @@ func tiktokStatusPush(order *model.Waybill, orderStatus int64, lng, lat string)
result.LogisticsStatus = 0
result.LogisticsContext = model.RiderGetOrderDeliverOther
}
delivery.PullTiktokRiderInfo(result)
delivery.PullTiktokRiderInfo(result, vendorOrgCode)
}
// OnWaybillExceptSF 异常报备

View File

@@ -415,7 +415,7 @@ func OnWaybillMsg(req *uuptapi.WaybillCallbackParam) (resp *uuptapi.CallbackResp
switch param.OrderVendorID {
case model.VendorIDDD:
Lng, Lat, _ := partner.GetRidderPositionGetter(param.WaybillVendorID).GetRidderPosition(nil, param.VendorOrderID, param.VendorOrderID, param.VendorWaybillID, param.VendorWaybillID2)
tiktokStatusPush(param, req.State, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat))
tiktokStatusPush(param, req.State, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), good.VendorOrgCode)
case model.VendorIDMTWM, model.VendorIDTaoVegetable:
delivery.GetOrderRiderInfoToPlatform(param.VendorOrderID, param.Status) // 骑手位置更新
if good.VendorID == model.VendorIDTaoVegetable && req.State == uuptapi.StateRMGrabsOrder {
@@ -425,7 +425,7 @@ func OnWaybillMsg(req *uuptapi.WaybillCallbackParam) (resp *uuptapi.CallbackResp
return uuptapi.Err2CallbackResponse(nil)
}
func tiktokStatusPush(param *model.Waybill, orderStatus string, lng, lat string) {
func tiktokStatusPush(param *model.Waybill, orderStatus string, lng, lat, vendorOrgCode string) {
result := &utils.RiderInfo{
OrderId: param.VendorOrderID,
ThirdCarrierOrderId: param.VendorOrderID,
@@ -463,7 +463,7 @@ func tiktokStatusPush(param *model.Waybill, orderStatus string, lng, lat string)
result.LogisticsStatus = 0
result.LogisticsContext = model.RiderGetOrderDeliverOther
}
delivery.PullTiktokRiderInfo(result)
delivery.PullTiktokRiderInfo(result, vendorOrgCode)
}
//辅助函数

View File

@@ -3,6 +3,7 @@ package ebai
import (
"errors"
"fmt"
"git.rosy.net.cn/jx-callback/business/model/dao"
"strings"
"time"
@@ -163,6 +164,16 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaia
err = partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus)
}
}
// 只有有售后订单就更新此订单的结算信息
if utils.Str2Int(orderStatus.VendorStatus) == ebaiapi.OrderPartRefundSuccess {
orderData, err2 := api.EbaiAPI.OrderPartRefundGet(orderStatus.RefVendorOrderID)
if err2 == nil && utils.MustInterface2Int64(orderData["shop_fee"]) != model.NO {
goodsOrder, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, model.VendorIDEBAI)
goodsOrder.TotalShopMoney = utils.MustInterface2Int64(orderData["shop_fee"])
dao.UpdateEntity(dao.GetDB(), goodsOrder, "TotalShopMoney")
}
}
retVal = api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, nil)
}
return retVal

View File

@@ -703,6 +703,10 @@ func SelectStoreSkuListByOpResult(storeSkuList []*partner.StoreSkuInfo, opResult
sql := ` UPDATE store_sku_bind SET ebai_id = 0,ebai_sync_status = 2 WHERE store_id = ? AND sku_id = ?`
param := []interface{}{storeID, v.SkuID}
dao.ExecuteSQL(dao.GetDB(), sql, param...)
} else if strings.Contains(opResultMap[utils.Str2Int64(v.VendorSkuID)], "商品禁止售卖不允许上架") || strings.Contains(opResultMap[utils.Str2Int64(v.VendorSkuID)], "商品已被禁售") {
sql := ` UPDATE store_sku_bind SET ebai_sync_status = 4 WHERE store_id = ? AND sku_id = ?`
param := []interface{}{storeID, v.SkuID}
dao.ExecuteSQL(dao.GetDB(), sql, param...)
}
selectedStoreSkuList = append(selectedStoreSkuList, opFailed)
}

View File

@@ -347,11 +347,15 @@ func (c *PurchaseHandler) OnStoreMsg(vendorOrgCode string, msg *jdapi.CallbackOr
err = partner.CurStoreManager.OnStoreStatusChanged(vendorStoreID, model.VendorIDJD, storeStatus)
} else {
// 可能在门店删除的情况下会出查不到门店的错误
globals.SugarLogger.Debugf("GetStoreStatus==============%v", err)
if errExt, ok := err.(*utils.ErrorWithCode); ok && errExt.IntCode() == 4 {
err = nil
}
}
}
if err != nil {
globals.SugarLogger.Debugf("OnStoreMsg==============%v", err)
}
return jdapi.Err2CallbackResponse(err, "")
}

View File

@@ -391,6 +391,7 @@ func (c *PurchaseHandler) onOrderMsg(msg *mtwmapi.CallbackMsg) (response *mtwmap
}
})
}
err = partner.CurOrderManager.OnOrderStatusChanged(msg.AppID, status)
if err == nil && msg.Cmd == mtwmapi.MsgTypeOrderFinished {
utils.CallFuncAsync(func() {
@@ -509,6 +510,11 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
"订单已经确认过了",
}) {
err = nil
goodsOrder, _ := partner.CurOrderManager.LoadOrder(order.VendorOrderID, order.VendorID)
if goodsOrder.Status < model.OrderStatusAccepted {
order.Status = model.OrderStatusAccepted
dao.UpdateEntity(dao.GetDB(), order, "Status")
}
} else {
globals.SugarLogger.Warnf("mtwm AcceptOrRefuseOrder orderID:%s failed with err:%v", order.VendorOrderID, err)
}

View File

@@ -149,13 +149,30 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwma
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
}
} else {
// msg-status 1-已申请 10-初审已同意 11-初审已驳回 16-初审已申诉 17-初审申诉已同意 18-初审申诉已驳回 20-终审已发起(用户已发货) 21-终审已同意 22-终审已驳回 26-终审已申诉 27-终审申诉已同意 28-终审申诉已驳回 30-已取消
if err := partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus); err == nil {
order, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, model.VendorIDMTWM)
// 订单回调全额退款接口时,将订单状态修改为取消
refundData := msg.Data.(*mtwmapi.CallbackRefundInfo)
if refundData.NotifyType == mtwmapi.MsgTypeOrderAgree && msg.Cmd == mtwmapi.MsgTypeOrderRefund {
order, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, model.VendorIDMTWM)
order.Status = model.OrderStatusCanceled
dao.UpdateEntity(dao.GetDB(), order, "Status")
} else if refundData.Status == "21" {
skuList, _ := dao.GetSimpleOrderSkus(dao.GetDB(), orderStatus.RefVendorOrderID, nil)
totalSkuCount := 0
for _, v := range skuList {
totalSkuCount += v.Count
}
financialSku, _ := dao.GetOrderRefundSkuList(dao.GetDB(), []string{orderStatus.RefVendorOrderID})
refundSkuCount := 0
for _, v := range financialSku {
refundSkuCount += v.Count
}
if totalSkuCount == refundSkuCount {
order.Status = model.OrderStatusCanceled
dao.UpdateEntity(dao.GetDB(), order, "Status")
}
}
// 新订单平台自动同意退单,某一些情况下产生的运单没退!这个处理一下!
@@ -168,7 +185,7 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwma
}
}
}
}
}
return mtwmapi.Err2CallbackResponse(err, "")

View File

@@ -462,13 +462,13 @@ func (c *PurchaseHandler) UpdateStoreBoxFee(ctx *jxcontext.Context, vendorOrgCod
func (c *PurchaseHandler) UpdateStoreLineStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, lineStatus int) (err error) {
mtwmApi := getAPI(vendorOrgCode, storeID, vendorStoreID)
switch lineStatus {
case model.StoreStatusOpened:
case model.StoreStatusOpened: // 先上线在开店
if err = mtwmApi.PoiOnline(vendorStoreID); err == nil {
err = mtwmApi.PoiOpen(vendorStoreID)
}
default:
if err = mtwmApi.PoiOffline(vendorStoreID); err == nil {
err = mtwmApi.PoiClose(vendorStoreID)
default: // 先关店,在下线
if err = mtwmApi.PoiClose(vendorStoreID); err == nil {
err = mtwmApi.PoiOffline(vendorStoreID)
}
}

View File

@@ -97,14 +97,21 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode string, vendorOrderID int64, ve
order.ConsigneeLat = jxutils.StandardCoordinate2Int(utils.Str2Float64(originalList[1]))
order.DiscountMoney = *orderDetail.DiscountFee
//var salePrice int64 = 0
//var weight int = 0
order.PmSubsidyMoney = *orderDetail.SkuDiscountPlatformFee // 平台承担优惠
// 添加需要赠送的东西(暂时没有赠品套餐直接商品)
multiSkuMap := make(map[int]int)
var (
skuSalePrice int64 = 0 // 商品售卖价
merchantDiscountsPrice int64 = 0 // 商户优惠价
// 平台优惠价
platformDiscountsPrice int64 = *orderDetail.PlatformDeduction.BaseLogisticsFee + *orderDetail.PlatformDeduction.TechnicalServiceFee + *orderDetail.PlatformDeduction.PayServiceFee + *orderDetail.PlatformDeduction.ThirdpartnarFee
)
if len(*orderDetail.SubOrderResponseList) > 0 {
for _, extra := range *orderDetail.SubOrderResponseList {
// 这个是包装袋的价格,用户退款是包装袋未推送退款,导致本地订单退款状态无法更新,取消包装袋的记录
skuSalePrice += *extra.OriginalFee
merchantDiscountsPrice += *extra.DiscountMerchantFee
// 这个是包装袋的价格,用户退款是包装袋未推送退款,导致本地订单退款状态无法更新,取消包装袋的记录(但是结算的时候需要加上去)
if *extra.SkuCode == "6108080" {
continue
}
@@ -200,7 +207,7 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode string, vendorOrderID int64, ve
v.IsVendorAct = model.YES
}
}
// 抖音订单手机号和收货地址是否同城(虚拟号,无法获取到正确地址)
//订单手机号和收货地址是否同城(虚拟号,无法获取到正确地址)
order.PhoneAscription = model.PhoneAscriptionAddressNo + "-" + "归属信息不匹配:" + "虚拟电话号码"
// 本地获取订单记录
@@ -217,6 +224,28 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode string, vendorOrderID int64, ve
order.StoreName = "未获取到" // 真实门店名称
}
//结算类型
if store.PayPercentage < 50 {
order.EarningType = model.EarningTypePoints
} else {
order.EarningType = model.EarningTypeQuote
}
// 平台结算金额
order.TotalShopMoney = skuSalePrice + *orderDetail.PostFee - merchantDiscountsPrice - platformDiscountsPrice
if order.EarningType == model.EarningTypePoints {
waybill, _ := partner.CurOrderManager.LoadWaybill(order.VendorWaybillID, order.WaybillVendorID)
if waybill == nil {
if (order.NewEarningPrice == 0 || order.NewEarningPrice != order.TotalShopMoney*int64(100-order.OrderPayPercentage/2)/int64(100)) && order.OrderPayPercentage <= 50 {
order.NewEarningPrice = order.TotalShopMoney * int64(100-order.OrderPayPercentage/2) / int64(100)
}
} else {
if (order.NewEarningPrice == 0 || order.NewEarningPrice != (order.TotalShopMoney-waybill.DesiredFee)*int64(100-order.OrderPayPercentage/2)/int64(100)) && order.OrderPayPercentage <= 50 {
order.NewEarningPrice = order.TotalShopMoney*int64(100-order.OrderPayPercentage/2)/int64(100) - waybill.DesiredFee
}
}
}
return order, orderMap, err
}

View File

@@ -3,7 +3,9 @@ package tiktok_store
import (
"errors"
"fmt"
"git.rosy.net.cn/baseapi/platformapi/autonavi"
"git.rosy.net.cn/baseapi/platformapi/tiktok_shop/ascription_place"
"git.rosy.net.cn/jx-callback/globals/api"
"regexp"
"strings"
"time"
@@ -133,16 +135,16 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode, vendorOrderID, vendorStoreID s
if len(result.SkuOrderList) > 0 {
for _, extra := range result.SkuOrderList {
sku := &model.OrderSku{
VendorOrderID: extra.ParentOrderId,
VendorID: model.VendorIDDD,
StoreSubID: 0,
StoreSubName: "",
Count: int(extra.ItemNum),
VendorSkuID: utils.Int64ToStr(extra.SkuId),
SkuID: utils.Str2Int(extra.OutSkuId),
JxSkuID: utils.Str2Int(extra.OutSkuId),
SkuName: extra.ProductName,
ShopPrice: extra.OriginAmount,
VendorOrderID: extra.ParentOrderId,
VendorID: model.VendorIDDD,
StoreSubID: 0,
StoreSubName: "",
Count: int(extra.ItemNum),
VendorSkuID: utils.Int64ToStr(extra.SkuId),
SkuID: utils.Str2Int(extra.OutSkuId),
JxSkuID: utils.Str2Int(extra.OutSkuId),
SkuName: extra.ProductName,
//ShopPrice: extra.OriginAmount, 京西价
VendorPrice: extra.OrderAmount / extra.ItemNum,
SalePrice: extra.OriginAmount,
EarningPrice: 0,
@@ -245,6 +247,15 @@ func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, par
//appKey := `7152420904331429407` // 暂时定死
//appSecret := `cc7ba367-2394-4cbb-81c6-26f0e929d1c6` //暂时定死
//return tiktokShop.NewExpress(appKey, appSecret, "").OrderStatusAndPsInfoNew(param)
//api.AutonaviAPI.
if param["latitude"].(string) != "" && param["longitude"].(string) != "" {
if len(param["latitude"].(string)) > len("39.978573") && len(param["longitude"].(string)) > len("116.5031060") { // 是否为百度坐标
lng, lat, _ := api.AutonaviAPI.CoordinateConvert(param["latitude"].(float64), param["longitude"].(float64), autonavi.CoordSysBaidu)
param["latitude"] = utils.Float64ToStr(lat)
param["longitude"] = utils.Float64ToStr(lng)
}
}
return getAPI(vendorOrgCode, 0, vendorStoreID).OrderStatusAndPsInfoNew(param)
}
@@ -598,22 +609,7 @@ func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName s
AddressId: 0,
StoreId: utils.Str2Int64(order.VendorStoreID),
}
switch order.WaybillVendorID {
case model.VendorIDDada:
logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeDaDa
case model.VendorIDMTPS:
logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeMeiTuan
case model.VendorIDFengNiao:
logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeFengNiao
case model.VendorIDSFPS:
logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeSF
case model.VendorIDUUPT:
logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeUU
case model.VendorJXFakeWL, -1:
logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeMerchant
default:
logisticsAdd.CompanyCode = tiktokShop.TiktokDeliveryTypeMerchant
}
logisticsAdd.CompanyCode = tiktokShop.JxVendorId2TiktokCode(order.WaybillVendorID)
//转门店自送通知抖音发货
return api.OrderDelivering(logisticsAdd)
}
@@ -641,7 +637,7 @@ func (c *PurchaseHandler) SelfDeliverDelivering(order *model.GoodsOrder, userNam
AddressId: 0,
StoreId: utils.Str2Int64(order.VendorStoreID),
}
param.CompanyCode = utils.JxVendorId2TiktokCode(order.WaybillVendorID)
param.CompanyCode = tiktokShop.JxVendorId2TiktokCode(order.WaybillVendorID)
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").OrderDelivering(param)
if err != nil {
return err
@@ -677,7 +673,7 @@ func (c *PurchaseHandler) SelfDeliverDelivered(order *model.GoodsOrder, userName
Longitude: utils.Float64ToStr(jxutils.IntCoordinate2Standard(order.ConsigneeLng)),
OpCode: tiktokShop.TiktokLogisticsDELIVERED,
}
riderInfo.LogisticsProviderCode = utils.JxVendorId2TiktokCode(order.WaybillVendorID)
riderInfo.LogisticsProviderCode = tiktokShop.JxVendorId2TiktokCode(order.WaybillVendorID)
bills, _ := dao.GetWaybills(dao.GetDB(), order.VendorOrderID, nil)
for _, v := range bills {
if v.Status == model.OrderStatusCanceled {
@@ -686,7 +682,7 @@ func (c *PurchaseHandler) SelfDeliverDelivered(order *model.GoodsOrder, userName
riderInfo.CourierName = v.CourierName
riderInfo.CourierPhone = v.CourierMobile
}
riderInfo.LogisticsProviderCode = utils.JxVendorId2TiktokCode(order.WaybillVendorID)
riderInfo.LogisticsProviderCode = tiktokShop.JxVendorId2TiktokCode(order.WaybillVendorID)
return c.GetOrderRider("", "", utils.Struct2MapByJson(riderInfo))
}