This commit is contained in:
richboo111
2023-04-25 10:39:28 +08:00
57 changed files with 1242 additions and 260 deletions

View File

@@ -5,7 +5,6 @@ import (
"encoding/base64" "encoding/base64"
"encoding/json" "encoding/json"
"errors" "errors"
"git.rosy.net.cn/jx-callback/globals"
"regexp" "regexp"
"strings" "strings"
"time" "time"
@@ -286,7 +285,6 @@ func LoginInternal(ctx *Context, authType, authID, authIDType, authSecret string
//如果是小程序 //如果是小程序
if authType == AuthTypeWXMini { // || authType == AuthTypeWXApp 此处AuthTypeWXApp没用上 if authType == AuthTypeWXMini { // || authType == AuthTypeWXApp 此处AuthTypeWXApp没用上
appID := strings.Split(authSecret, ",")[0] appID := strings.Split(authSecret, ",")[0]
globals.SugarLogger.Debugf("authSecret=%s,appID=%s", authSecret, appID)
// 菜市商家 // // // 京西商城 // 菜市商家 // // // 京西商城
if appID == model.JXC4BusinessAppId || appID == "wx2d6949f724b2541d" || appID == "wx18111a41fd17f24f" || appID == model.JXC4AppId { //菜市或者果园 if appID == model.JXC4BusinessAppId || appID == "wx2d6949f724b2541d" || appID == "wx18111a41fd17f24f" || appID == model.JXC4AppId { //菜市或者果园
if authInfo.AuthBindInfo.UserID != "" { if authInfo.AuthBindInfo.UserID != "" {

View File

@@ -75,7 +75,7 @@ func Init() {
riderListInfo = list riderListInfo = list
} }
// AutoSettingFakeDelivery 抖音自动设置骑手, 推送假订单 // AutoSettingFakeDelivery 抖音自动设置骑手(饿百), 推送假订单
func AutoSettingFakeDelivery() { func AutoSettingFakeDelivery() {
db := dao.GetDB() db := dao.GetDB()
@@ -106,9 +106,17 @@ func AutoSettingFakeDelivery() {
riderKey := "" riderKey := ""
if strings.Contains(v.ConsigneeAddress, "重庆") || strings.Contains(v.ConsigneeAddress, "上海") || strings.Contains(v.ConsigneeAddress, "北京") { if strings.Contains(v.ConsigneeAddress, "重庆") || strings.Contains(v.ConsigneeAddress, "上海") || strings.Contains(v.ConsigneeAddress, "北京") {
riderKey = strings.Split(v.ConsigneeAddress, "市")[0] riderKey = strings.Split(v.ConsigneeAddress, "市")[0]
} else { } else if strings.Contains(v.ConsigneeAddress, "省") {
riderKey = strings.Split(v.ConsigneeAddress, "省")[0] riderKey = strings.Split(v.ConsigneeAddress, "省")[0]
} else {
storeDetail, _ := dao.GetStoreDetail(db, v.JxStoreID, 0, "")
if strings.Contains(storeDetail.Address, "重庆") || strings.Contains(storeDetail.Address, "上海") || strings.Contains(storeDetail.Address, "北京") {
riderKey = strings.Split(storeDetail.Address, "市")[0]
} else {
riderKey = strings.Split(storeDetail.Address, "省")[0]
}
} }
if len(riderListInfo[riderKey]) == model.NO { if len(riderListInfo[riderKey]) == model.NO {
// 骑手列表 // 骑手列表
configRiderList, err := dao.QueryConfigs(db, "riderList", "Sys", "") configRiderList, err := dao.QueryConfigs(db, "riderList", "Sys", "")
@@ -121,7 +129,7 @@ func AutoSettingFakeDelivery() {
return return
} }
} }
globals.SugarLogger.Debugf("===============riderListInfo= : %s", riderKey)
randNumber, _ := rand.Int(rand.Reader, big.NewInt(int64(len(riderListInfo[riderKey])))) randNumber, _ := rand.Int(rand.Reader, big.NewInt(int64(len(riderListInfo[riderKey]))))
randTime := randNumber.Int64() randTime := randNumber.Int64()
if randTime < 0 { if randTime < 0 {
@@ -130,7 +138,7 @@ func AutoSettingFakeDelivery() {
if randTime >= int64(len(riderListInfo[riderKey])) { if randTime >= int64(len(riderListInfo[riderKey])) {
randTime = int64(len(riderListInfo[riderKey])) - 1 randTime = int64(len(riderListInfo[riderKey])) - 1
} }
if v.PhoneAscription == "" || strings.Split(v.PhoneAscription, "-")[0] != model.PhoneAscriptionAddressYes { if (v.PhoneAscription == "" || strings.Split(v.PhoneAscription, "-")[0] != model.PhoneAscriptionAddressYes) && v.VendorID == model.VendorIDDD {
continue continue
} }
// 自动拣货 // 自动拣货
@@ -148,7 +156,6 @@ func AutoSettingFakeDelivery() {
break break
} }
for riderName, riderPhone := range riderListInfo[riderKey][randTime] { for riderName, riderPhone := range riderListInfo[riderKey][randTime] {
globals.SugarLogger.Debugf("SelfDeliveringAndUpdateStatus : %s", v.VendorOrderID)
if err := defsch.FixedScheduler.SelfDeliveringAndUpdateStatus(jxcontext.AdminCtx, v.VendorOrderID, v.VendorID, jxcontext.AdminCtx.GetUserName(), riderName, riderPhone); err != nil { if err := defsch.FixedScheduler.SelfDeliveringAndUpdateStatus(jxcontext.AdminCtx, v.VendorOrderID, v.VendorID, jxcontext.AdminCtx.GetUserName(), riderName, riderPhone); err != nil {
globals.SugarLogger.Errorf("自动发货错误:[%v]", err) globals.SugarLogger.Errorf("自动发货错误:[%v]", err)
break break

View File

@@ -66,7 +66,6 @@ func notifyWxNewFakeJdOrder(order *model.GoodsOrder, storeID int) (err error) {
} }
title := fmt.Sprintf("你有到家菜市新订单%d", order.OrderSeq) title := fmt.Sprintf("你有到家菜市新订单%d", order.OrderSeq)
content := sb.String() content := sb.String()
// globals.SugarLogger.Debugf("notifyWxNewFakeJdOrder, orderID:%s, content:%s", order.VendorOrderID, content)
_, err = weixinmsg.SendStoreMessage(jxcontext.AdminCtx, title, content, []int{storeID}, nil, "", model.MessageTypeStore, true, true) _, err = weixinmsg.SendStoreMessage(jxcontext.AdminCtx, title, content, []int{storeID}, nil, "", model.MessageTypeStore, true, true)
return err return err
} }

View File

@@ -67,19 +67,22 @@ func (c *OrderManager) onAfsOrderNew(afsOrder *model.AfsOrder, orderStatus *mode
panic(r) panic(r)
} }
}() }()
isDuplicated, err := addOrderOrWaybillStatus(orderStatus, db) isDuplicated, err := addOrderOrWaybillStatus(orderStatus, db)
if err != nil || isDuplicated { if err != nil || (isDuplicated && orderStatus.VendorID != model.VendorIDJX) {
if err == nil { if err == nil {
dao.Commit(db, txDB) dao.Commit(db, txDB)
} }
return err return err
} }
var existAfsOrder *model.AfsOrder
if existAfsOrder, err = c.loadAfsOrder(db, afsOrder.AfsOrderID, afsOrder.VendorID); err != nil { existAfsOrder, err := c.loadAfsOrder(db, afsOrder.AfsOrderID, afsOrder.VendorID)
if err != nil {
if !dao.IsNoRowsError(err) { if !dao.IsNoRowsError(err) {
return err return err
} }
} }
if existAfsOrder != nil { if existAfsOrder != nil {
// todo 可能导致状态回绕 // todo 可能导致状态回绕
existAfsOrder.Status = afsOrder.Status existAfsOrder.Status = afsOrder.Status
@@ -327,8 +330,9 @@ func (c *OrderManager) updateAfsOrderOtherInfo(db *dao.DaoDB, afsOrder *model.Af
afsOrder.JxStoreID = storeDetail.Store.ID afsOrder.JxStoreID = storeDetail.Store.ID
} }
} }
order, err2 := c.LoadOrder(afsOrder.VendorOrderID, afsOrder.VendorID)
if afsOrder.StoreID == 0 && afsOrder.JxStoreID == 0 { if afsOrder.StoreID == 0 && afsOrder.JxStoreID == 0 {
if order, err2 := c.LoadOrder(afsOrder.VendorOrderID, afsOrder.VendorID); err2 == nil { if err2 == nil {
afsOrder.JxStoreID = order.JxStoreID afsOrder.JxStoreID = order.JxStoreID
if afsOrder.StoreID == 0 { if afsOrder.StoreID == 0 {
afsOrder.StoreID = order.StoreID afsOrder.StoreID = order.StoreID
@@ -346,6 +350,9 @@ func (c *OrderManager) updateAfsOrderOtherInfo(db *dao.DaoDB, afsOrder *model.Af
} }
if err = c.updateAfsOrderSkuOtherInfo(db, afsOrder); err == nil { if err = c.updateAfsOrderSkuOtherInfo(db, afsOrder); err == nil {
jxutils.RefreshAfsOrderSkuRelated(afsOrder) jxutils.RefreshAfsOrderSkuRelated(afsOrder)
if afsOrder.RefundType == model.AfsTypeFullRefund && afsOrder.VendorID == model.VendorIDJX && order.DeliveryType != model.OrderDeliveryTypeSelfTake {
afsOrder.SkuUserMoney = order.ActualPayPrice
}
} }
} }
return err return err
@@ -368,9 +375,9 @@ func (c *OrderManager) setAfsOrderID(db *dao.DaoDB, orderStatus *model.OrderStat
list := strings.Split(afsOrderList[0].AfsOrderID, "-") list := strings.Split(afsOrderList[0].AfsOrderID, "-")
if len(list) > 1 { if len(list) > 1 {
index = int(utils.Str2Int64WithDefault(list[1], 0)) index = int(utils.Str2Int64WithDefault(list[1], 0))
if afsOrderList[0].Status >= model.AfsOrderStatusFinished { //if afsOrderList[0].Status >= model.AfsOrderStatusFinished {
index++ index++
} //}
} }
} }
} else { } else {

View File

@@ -902,7 +902,7 @@ func (c *OrderManager) GetStoresOrderSaleInfoNew(ctx *jxcontext.Context, storeID
orderIDMap := make(map[string]struct{}) orderIDMap := make(map[string]struct{})
var vendorOrderIDs []string var vendorOrderIDs []string
orderSkuList, err := dao.GetStoreOrderSkuList(db, storeIDList, fromTime, toTime, statusList, true, isService) orderSkuList, err := dao.GetStoreOrderSkuList(db, storeIDList, fromTime, toTime, statusList, true, isService) // 所有的完成订单
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -1019,7 +1019,7 @@ func (c *OrderManager) GetStoresOrderSaleInfoNew(ctx *jxcontext.Context, storeID
} }
return orderMap, orderSkuMap, saleInfoMap return orderMap, orderSkuMap, saleInfoMap
} }
_, _, saleInfoMap := orderSkuHandler(orderSkuList) _, _, saleInfoMap := orderSkuHandler(orderSkuList) // 所有订单的支付金额
orderMap, orderSkuMap, _ := orderSkuHandler(orderSkuList4Afs) orderMap, orderSkuMap, _ := orderSkuHandler(orderSkuList4Afs)
afsOrderMap := make(map[string]*model.GoodsOrder) afsOrderMap := make(map[string]*model.GoodsOrder)
@@ -1074,6 +1074,23 @@ func (c *OrderManager) GetStoresOrderSaleInfoNew(ctx *jxcontext.Context, storeID
saleInfo.Count++ saleInfo.Count++
} }
for _, v := range saleInfoMap { for _, v := range saleInfoMap {
if v.Status == model.OrderStatusFinished {
// 计算平台计算
settle, _ := dao.GetPlatformSettlement(db, storeIDList, fromTime, toTime)
for _, s := range settle {
if v.VendorID == s.VendorID {
v.PlatformSettlement = s.TotalShopMoney
}
}
// 计算三方配送
fee, _ := dao.GetPlatformDesiredFee(db, storeIDList, fromTime, toTime)
for _, f := range fee {
if v.VendorID == f.VendorID {
v.ActualFee = f.ActualFee
}
}
}
saleInfoList = append(saleInfoList, v) saleInfoList = append(saleInfoList, v)
} }
return saleInfoList, err return saleInfoList, err

View File

@@ -78,10 +78,12 @@ func (c *BaseScheduler) SelfDeliveredAndUpdateStatus(ctx *jxcontext.Context, ven
err = c.Swtich2SelfDelivered(order, userName) err = c.Swtich2SelfDelivered(order, userName)
} }
if err == nil { if err == nil {
// order.Status = model.OrderStatusFinished // todo 是否需要强制设置完成状态? order.Status = model.OrderStatusFinished // todo 是否需要强制设置完成状态?
if err = dao.SetOrderFlag(dao.GetDB(), ctx.GetUserName(), order.VendorOrderID, order.VendorID, model.OrderFlagMaskSetDelivered); err == nil { if err = dao.SetOrderFlag(dao.GetDB(), ctx.GetUserName(), order.VendorOrderID, order.VendorID, model.OrderFlagMaskSetDelivered); err != nil {
return err return err
} }
order.OrderFinishedAt = time.Now()
dao.UpdateEntity(dao.GetDB(), order, "Status", "OrderFinishedAt")
} }
} }
return err return err
@@ -99,7 +101,7 @@ func (c *BaseScheduler) PickupGoodsAndUpdateStatus(ctx *jxcontext.Context, vendo
err = c.PickupGoods(order, flag, userName) err = c.PickupGoods(order, flag, userName)
if err == nil { if err == nil {
order.Status = model.OrderStatusFinishedPickup order.Status = model.OrderStatusFinishedPickup
if err = partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order); err == nil { if err = partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order); err != nil {
return err return err
} }
} }
@@ -108,7 +110,8 @@ func (c *BaseScheduler) PickupGoodsAndUpdateStatus(ctx *jxcontext.Context, vendo
order.Status = model.OrderStatusFinished order.Status = model.OrderStatusFinished
order.VendorStatus = utils.Int64ToStr(model.OrderStatusFinished) order.VendorStatus = utils.Int64ToStr(model.OrderStatusFinished)
order.Flag = 128 order.Flag = 128
dao.UpdateEntity(dao.GetDB(), order, "Status", "VendorStatus", "Flag") order.OrderFinishedAt = time.Now()
dao.UpdateEntity(dao.GetDB(), order, "Status", "VendorStatus", "Flag", "OrderFinishedAt")
} }
} }
return err return err
@@ -227,7 +230,7 @@ func (c *BaseScheduler) AgreeOrRefuseRefund(ctx *jxcontext.Context, afsOrderID s
) )
waybills, _ := dao.GetWaybills(db, order.VendorOrderID) waybills, _ := dao.GetWaybills(db, order.VendorOrderID)
//美团的订单如果是同意全部退款,要取消所有三方运单并停止调度 //美团的订单如果是同意全部退款,要取消所有三方运单并停止调度
if order.VendorID == model.VendorIDMTWM { if order.VendorID == model.VendorIDMTWM || order.VendorID == model.VendorIDJX {
var ( var (
afsCount, orderCount int afsCount, orderCount int
) )
@@ -239,13 +242,19 @@ func (c *BaseScheduler) AgreeOrRefuseRefund(ctx *jxcontext.Context, afsOrderID s
orderCount += v.Count orderCount += v.Count
} }
//如果售后退款的商品数等于订单商品数,我就当是全部退款了 //如果售后退款的商品数等于订单商品数,我就当是全部退款了
if afsCount == orderCount { if afsCount == orderCount && order.VendorID == model.VendorIDMTWM {
order.DeliveryFlag |= model.OrderDeliveryFlagMaskScheduleDisabled order.DeliveryFlag |= model.OrderDeliveryFlagMaskScheduleDisabled
partner.CurOrderManager.UpdateOrderFields(order, []string{"DeliveryFlag"}) partner.CurOrderManager.UpdateOrderFields(order, []string{"DeliveryFlag"})
for _, v := range waybills { for _, v := range waybills {
c.CancelWaybill(v, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrActive) c.CancelWaybill(v, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrActive)
} }
} }
if afsCount == orderCount && order.VendorID == model.VendorIDJX {
order.DeliveryFlag |= model.OrderDeliveryFlagMaskScheduleDisabled
order.Status = model.OrderStatusCanceled
order.VendorStatus = utils.Int2Str(model.OrderStatusCanceled)
partner.CurOrderManager.UpdateOrderFields(order, []string{"DeliveryFlag", "Status", "VendorStatus"})
}
} }
if order.EarningType == model.EarningTypePoints { if order.EarningType == model.EarningTypePoints {
var ( var (
@@ -278,7 +287,7 @@ func (c *BaseScheduler) AgreeOrRefuseRefund(ctx *jxcontext.Context, afsOrderID s
} }
} }
if approveType != partner.AfsApproveTypeRefused { if approveType != partner.AfsApproveTypeRefused && err == nil {
storeDetail, err := partner.CurOrderManager.LoadStoreDetail(afsOrder.StoreID, afsOrder.VendorID) storeDetail, err := partner.CurOrderManager.LoadStoreDetail(afsOrder.StoreID, afsOrder.VendorID)
if err != nil { if err != nil {
return err return err

View File

@@ -81,7 +81,7 @@ func (s *DefScheduler) SelfDeliveringAndUpdateStatus(ctx *jxcontext.Context, ven
} }
// 上面是真的转自送,支持美团,饿百,京东,如果时抖店,抖店暂时全部是自送的!但是有骑手信息时,就是一个白嫖单子! // 上面是真的转自送,支持美团,饿百,京东,如果时抖店,抖店暂时全部是自送的!但是有骑手信息时,就是一个白嫖单子!
if order.VendorID == model.VendorIDDD && courierName != "" && courierMobile != "" && err == nil { if (order.VendorID == model.VendorIDDD || order.VendorID == model.VendorIDEBAI) && courierName != "" && courierMobile != "" && err == nil {
timeNow := time.Now() timeNow := time.Now()
rand.Seed(timeNow.UnixNano()) rand.Seed(timeNow.UnixNano())
randNumber := rand.Int63n(640) randNumber := rand.Int63n(640)
@@ -94,7 +94,7 @@ func (s *DefScheduler) SelfDeliveringAndUpdateStatus(ctx *jxcontext.Context, ven
VendorWaybillID2: "", VendorWaybillID2: "",
WaybillVendorID: model.VendorJXFakeWL, WaybillVendorID: model.VendorJXFakeWL,
VendorOrderID: order.VendorOrderID, VendorOrderID: order.VendorOrderID,
OrderVendorID: model.VendorIDDD, OrderVendorID: order.VendorID,
CourierName: courierName, CourierName: courierName,
CourierMobile: courierMobile, CourierMobile: courierMobile,
Status: model.OrderStatusNew, Status: model.OrderStatusNew,
@@ -108,7 +108,7 @@ func (s *DefScheduler) SelfDeliveringAndUpdateStatus(ctx *jxcontext.Context, ven
WaybillFinishedAt: utils.DefaultTimeValue, WaybillFinishedAt: utils.DefaultTimeValue,
StatusTime: timeNow.Add(randTime), // 下一状态时间 StatusTime: timeNow.Add(randTime), // 下一状态时间
OriginalData: "", OriginalData: "",
Remark: "自定义物流单", Remark: "自定义物流单(抖音/饿了么)",
VendorOrgCode: order.VendorOrgCode, VendorOrgCode: order.VendorOrgCode,
} }
err = dao.CreateEntity(dao.GetDB(), bill) err = dao.CreateEntity(dao.GetDB(), bill)
@@ -130,9 +130,9 @@ func (s *DefScheduler) canOrderCreateWaybillNormally(order *model.GoodsOrder, sa
func (s *DefScheduler) isPossibleSwitch2SelfDelivery(order *model.GoodsOrder) (err error) { func (s *DefScheduler) isPossibleSwitch2SelfDelivery(order *model.GoodsOrder) (err error) {
//TODO 刷单用,之后不刷单了删除 //TODO 刷单用,之后不刷单了删除
if order.VendorID == model.VendorIDDD { //if order.VendorID == model.VendorIDDD {
return nil // return nil
} //}
if model.IsOrderDeliveryByPlatform(order) { if model.IsOrderDeliveryByPlatform(order) {
if order.Status < model.OrderStatusFinishedPickup { if order.Status < model.OrderStatusFinishedPickup {

View File

@@ -2035,32 +2035,32 @@ func RrefreshMtwmVendorAct(ctx *jxcontext.Context) (err error) {
} }
// 查询门店爆款商品,当门店存在爆款时,取消之前的力荐商品,将新的爆款设置为力荐商品 // 查询门店爆款商品,当门店存在爆款时,取消之前的力荐商品,将新的爆款设置为力荐商品
// 商品为手动设置力荐或者爆款活动在取消力荐之前被删除,那么无法取消被力荐的商品! // 商品为手动设置力荐或者爆款活动在取消力荐之前被删除,那么无法取消被力荐的商品!
//if k == mtwmapi.RetailActTypeSecKill && len(actList) > 0 && storeMap.StoreID == 1 { if k == mtwmapi.RetailActTypeSecKill && len(actList) > 0 && storeMap.VendorID == model.VendorIDMTWM {
// allActivitySkuIdList := make([]string, 0, 0) // 此门店全部的折扣(爆款)活动商品 //allActivitySkuIdList := make([]string, 0, 0) // 此门店全部的折扣(爆款)活动商品
// activationActivitySkuIdList := make([]*partner.StoreSkuInfo, 0, 0) // 此门店正在进行的折扣(爆款)活动商品 //activationActivitySkuIdList := make([]*partner.StoreSkuInfo, 0, 0) // 此门店正在进行的折扣(爆款)活动商品
// loseActivitySkuIdList := make([]*partner.StoreSkuInfo, 0, 0) // 此门店已经结束的折扣(爆款)活动商品 //loseActivitySkuIdList := make([]*partner.StoreSkuInfo, 0, 0) // 此门店已经结束的折扣(爆款)活动商品
// for _, ac := range actList { //for _, ac := range actList {
// allActivitySkuIdList = append(allActivitySkuIdList, utils.Int64ToStr(ac.ItemID)) // allActivitySkuIdList = append(allActivitySkuIdList, utils.Int64ToStr(ac.ItemID))
// // 已经生效的爆款活动 // // 已经生效的爆款活动
// if ac.Status == 1 && ac.SkuId != "" { // if ac.Status == 1 && ac.SkuId != "" {
// activationActivitySkuIdList = append(activationActivitySkuIdList, &partner.StoreSkuInfo{ // activationActivitySkuIdList = append(activationActivitySkuIdList, &partner.StoreSkuInfo{
// SkuID: utils.Str2Int(ac.SkuId), // SkuID: utils.Str2Int(ac.SkuId),
// IsSpecialty: 1, // IsSpecialty: 1,
// }) // })
// } // }
// // 已经失效的爆款活动 // // 已经失效的爆款活动
// if ac.Status == 0 && ac.SkuId != "" { // if ac.Status == 0 && ac.SkuId != "" {
// loseActivitySkuIdList = append(loseActivitySkuIdList, &partner.StoreSkuInfo{ // loseActivitySkuIdList = append(loseActivitySkuIdList, &partner.StoreSkuInfo{
// SkuID: utils.Str2Int(ac.SkuId), // SkuID: utils.Str2Int(ac.SkuId),
// IsSpecialty: 0, // IsSpecialty: 0,
// }) // })
// } // }
// } //}
// // 取消当前力荐商品 //// 取消当前力荐商品
// partner.GetPurchasePlatformFromVendorID(storeMap.VendorID).(partner.ISingleStoreStoreSkuHandler).UpdateStoreSkusSpecTag(ctx, storeMap.VendorOrgCode, storeMap.StoreID, storeMap.VendorStoreID, loseActivitySkuIdList) //partner.GetPurchasePlatformFromVendorID(storeMap.VendorID).(partner.ISingleStoreStoreSkuHandler).UpdateStoreSkusSpecTag(ctx, storeMap.VendorOrgCode, storeMap.StoreID, storeMap.VendorStoreID, loseActivitySkuIdList)
// // 重新推荐力荐商品 //// 重新推荐力荐商品
// partner.GetPurchasePlatformFromVendorID(storeMap.VendorID).(partner.ISingleStoreStoreSkuHandler).UpdateStoreSkusSpecTag(ctx, storeMap.VendorOrgCode, storeMap.StoreID, storeMap.VendorStoreID, activationActivitySkuIdList) //partner.GetPurchasePlatformFromVendorID(storeMap.VendorID).(partner.ISingleStoreStoreSkuHandler).UpdateStoreSkusSpecTag(ctx, storeMap.VendorOrgCode, storeMap.StoreID, storeMap.VendorStoreID, activationActivitySkuIdList)
//} }
} }
return retVal, err return retVal, err
}, storeMaps) }, storeMaps)

View File

@@ -1194,7 +1194,7 @@ func getJDCategoryLoadingLocalCategoryReflex(jdCategoryId, jdsCategoryID, ebaiCa
if mtwmCategoryID == "" && cats[0].MtwmCategoryID != 0 { if mtwmCategoryID == "" && cats[0].MtwmCategoryID != 0 {
mtwmCategoryID = utils.Int64ToStr(cats[0].MtwmCategoryID) mtwmCategoryID = utils.Int64ToStr(cats[0].MtwmCategoryID)
} }
if jxCategoryId == 0 { if jxCategoryId == 0 || jxCategoryId == 291 {
jxCategoryId = cats[0].ID jxCategoryId = cats[0].ID
} }
} }
@@ -1260,30 +1260,54 @@ func updateOrCreateSkuVendorCategoryMap(db *dao.DaoDB, ctx *jxcontext.Context, n
} }
} else { } else {
if payload["jdCategoryID"] != nil { if payload["jdCategoryID"] != nil {
jdCategoryId = payload["jdCategoryID"].(string) value, ok := payload["jdCategoryID"].(string)
} else { if ok && value != "" && value != "0" {
jdCategoryId = getCategoryByName(payload["name"].(string)) jdCategoryId = payload["jdCategoryID"].(string)
} else {
jdCategoryId = getCategoryByName(payload["name"].(string))
}
} }
if payload["jdsCategoryID"] != nil { if payload["jdsCategoryID"] != nil {
jdsCategoryID = payload["jdsCategoryID"].(string) value, ok := payload["jdCategoryID"].(string)
if ok && value != "" && value != "0" {
jdsCategoryID = payload["jdsCategoryID"].(string)
}
} }
if payload["ebaiCategoryID"] != nil { if payload["ebaiCategoryID"] != nil {
ebaiCategoryID = payload["ebaiCategoryID"].(string) value, ok := payload["ebaiCategoryID"].(string)
if ok && value != "" && value != "0" {
ebaiCategoryID = payload["ebaiCategoryID"].(string)
}
} }
if payload["mtwmCategoryID"] != nil { if payload["mtwmCategoryID"] != nil {
mtwmCategoryID = payload["mtwmCategoryID"].(string) value, ok := payload["mtwmCategoryID"].(string)
if ok && value != "" && value != "0" {
mtwmCategoryID = payload["mtwmCategoryID"].(string)
}
} }
if payload["categoryID2"] != nil && !utils.IsNil(payload["categoryID2"]) { if payload["categoryID2"] != nil && !utils.IsNil(payload["categoryID2"]) {
jxCategoryIDNumber, err := payload["categoryID2"].(json.Number).Int64() var jxCategoryIDNumber int64
if err != nil { if value, ok := payload["categoryID2"].(string); ok && value != "" {
return false jxCategoryIDNumber = utils.Str2Int64(value)
}
if value, ok := payload["categoryID2"].(int64); ok && value != 0 {
jxCategoryIDNumber = value
}
if value, ok := payload["categoryID2"].(json.Number); ok && value != "" {
jxCategoryIDNumber, _ = value.Int64()
} }
jxCategoryID = int(jxCategoryIDNumber) jxCategoryID = int(jxCategoryIDNumber)
} else if payload["categoryID"] != nil && !utils.IsNil(payload["categoryID"]) { } else if payload["categoryID"] != nil && !utils.IsNil(payload["categoryID"]) {
jxCategoryIDNumber, err := payload["categoryID"].(json.Number).Int64() var jxCategoryIDNumber int64
if err != nil { if value, ok := payload["categoryID"].(string); ok && value != "" {
return false jxCategoryIDNumber = utils.Str2Int64(value)
}
if value, ok := payload["categoryID"].(int64); ok && value != 0 {
jxCategoryIDNumber = value
}
if value, ok := payload["categoryID"].(json.Number); ok && value != "" {
jxCategoryIDNumber, _ = value.Int64()
} }
jxCategoryID = int(jxCategoryIDNumber) jxCategoryID = int(jxCategoryIDNumber)
} else { } else {
@@ -1295,7 +1319,9 @@ func updateOrCreateSkuVendorCategoryMap(db *dao.DaoDB, ctx *jxcontext.Context, n
} }
if payload["ddCategoryID"] != nil { if payload["ddCategoryID"] != nil {
ddCategoryID = payload["ddCategoryID"].(string) if value, ok := payload["ddCategoryID"].(string); ok && value != "" {
ddCategoryID = value
}
} else { } else {
ddCategoryID = getCategoryByImg(payload["descImg"].(string), payload["img"].(string), payload["img2"].(string), payload["img3"].(string), payload["img4"].(string), payload["img5"].(string)) ddCategoryID = getCategoryByImg(payload["descImg"].(string), payload["img"].(string), payload["img2"].(string), payload["img3"].(string), payload["img4"].(string), payload["img5"].(string))
} }
@@ -1321,6 +1347,10 @@ func updateOrCreateSkuVendorCategoryMap(db *dao.DaoDB, ctx *jxcontext.Context, n
updateOrCreate(model.VendorIDJD, nameID, jdCategoryId) updateOrCreate(model.VendorIDJD, nameID, jdCategoryId)
flag = true flag = true
} }
if jxCategoryID != 0 && jxCategoryID != 291 {
dao.ExecuteSQL(dao.GetDB(), `UPDATE sku_name SET category_id = ? WHERE id = ?`, []interface{}{jxCategoryID, nameID}...)
flag = true
}
} }
return flag return flag
@@ -2331,18 +2361,34 @@ func CreateUpcSkuByExcelBin(ctx *jxcontext.Context, reader io.Reader, categoryID
if configs, err := dao.QueryConfigs(dao.GetDB(), "mtwmCookieStr", model.ConfigTypeCookie, ""); err == nil { if configs, err := dao.QueryConfigs(dao.GetDB(), "mtwmCookieStr", model.ConfigTypeCookie, ""); err == nil {
api.MtwmAPI.SetCookieWithStr(configs[0].Value) api.MtwmAPI.SetCookieWithStr(configs[0].Value)
} }
result, err := api.MtwmAPI.GetStandardProductListWithCond(*skuName.Upc)
if result != nil { //result, err := api.MtwmAPI.GetStandardProductListWithCond(*skuName.Upc)
productInfo.OriginalName = result.Name //if result != nil {
productInfo.OriginalSpec = result.Spec result, err := api.JdAPI.GetJdUpcCodeByName("", *skuName.Upc, 1, 5)
productInfo.Name = result.Name if result != nil && len(result) != 0 {
productInfo.SpecUnit = result.SpecUnit productInfo.OriginalName = result[0].OriginalName
productInfo.Unit = result.Unit productInfo.OriginalSpec = result[0].OriginalSpec
productInfo.SpecQuality = float32(result.SpecNew) productInfo.Name = result[0].Name
productInfo.ImgList = strings.Split(result.Pic, ",") productInfo.SpecUnit = result[0].SpecUnit
productInfo.Weight = float32(result.Weight) productInfo.Unit = result[0].Unit
productInfo.BrandName = result.BrandNamePath productInfo.SpecQuality = result[0].SpecQuality
productInfo.ImgList = result[0].ImgList
if result[0].Img != "" {
productInfo.ImgList = append(productInfo.ImgList, productInfo.Img)
}
productInfo.Weight = result[0].Weight
productInfo.BrandName = result[0].BrandName
setImgs(skuName, productInfo.ImgList) setImgs(skuName, productInfo.ImgList)
// productInfo.OriginalName = result.Name
// productInfo.OriginalSpec = result.Spec
// productInfo.Name = result.Name
// productInfo.SpecUnit = result.SpecUnit
// productInfo.Unit = result.Unit
// productInfo.SpecQuality = float32(result.SpecNew)
// productInfo.ImgList = strings.Split(result.Pic, ",")
// productInfo.Weight = float32(result.Weight)
// productInfo.BrandName = result.BrandNamePath
// setImgs(skuName, productInfo.ImgList)
} else { } else {
retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, "美团cookie过期或者没查询到")} retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, "美团cookie过期或者没查询到")}
return retVal, err return retVal, err
@@ -2505,16 +2551,48 @@ func CreateUpcSkuByExcelBin(ctx *jxcontext.Context, reader io.Reader, categoryID
skuName.Img5 = downloadURL skuName.Img5 = downloadURL
} }
} }
// 标品不存在规格是默认为包
if (skuName.Unit == "份" && *skuName.Upc != "") || skuName.Unit == "" {
skuName.Unit = "包"
}
if !isUpdate { if !isUpdate {
_, err = AddSkuName(ctx, skuName, ctx.GetUserName()) _, err = AddSkuName(ctx, skuName, ctx.GetUserName())
} else { } else {
var data []*model.SkuVendorCategoryMap
err = dao.GetRows(db, &data, `SELECT * FROM sku_vendor_category_map WHERE name_id = ? AND deleted_at = ?`, []interface{}{sku.ID, utils.DefaultTimeValue}...)
sku.Name = skuName.Name sku.Name = skuName.Name
sku.Img = skuName.Img sku.Img = skuName.Img
sku.Img2 = skuName.Img2 sku.Img2 = skuName.Img2
sku.Img3 = skuName.Img3 sku.Img3 = skuName.Img3
sku.Img4 = skuName.Img4 sku.Img4 = skuName.Img4
sku.Img5 = skuName.Img5 sku.Img5 = skuName.Img5
dao.UpdateEntity(db, sku, "Name", "Img", "Img2", "Img3", "Img4", "Img5") sku.Unit = skuName.Unit
dao.UpdateEntity(db, sku, "Name", "Img", "Img2", "Img3", "Img4", "Img5", "Unit")
payload := make(map[string]interface{}, 0)
payload["categoryID2"] = utils.Int2Str(sku.CategoryID)
payload["categoryID"] = utils.Int2Str(sku.CategoryID)
payload["descImg"] = sku.DescImg
payload["img"] = sku.Img
payload["img2"] = sku.Img2
payload["img3"] = sku.Img3
payload["img4"] = sku.Img4
payload["img5"] = sku.Img5
for _, d := range data {
switch d.VendorID {
case model.VendorIDJD:
payload["jdCategoryID"] = d.VendorCategoryID
case model.VendorIDMTWM:
payload["mtwmCategoryID"] = d.VendorCategoryID
case model.VendorIDJDShop:
case model.VendorIDDD:
payload["ddCategoryID"] = d.VendorCategoryID
case model.VendorIDEBAI:
payload["ebaiCategoryID"] = d.VendorCategoryID
}
}
updateOrCreateSkuVendorCategoryMap(db, ctx, sku.ID, payload, nil, false)
} }
if err != nil { if err != nil {
retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())} retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
@@ -3303,7 +3381,7 @@ func setImgs2(v *model.SkuName, imgs []string) (err error) {
return err return err
} }
func GetSkuNamesNew(ctx *jxcontext.Context, keyword string, skuIDs, skuNameIDs []int, categoryID, status int, isBySku bool, offset, pageSize int) (skuNamesInfo *SkuNamesInfo, err error) { func GetSkuNamesNew(ctx *jxcontext.Context, keyword string, skuIDs, skuNameIDs []int, categoryID, status int, isBySku bool, offset, pageSize, bestSeller int) (skuNamesInfo *SkuNamesInfo, err error) {
var ( var (
db = dao.GetDB() db = dao.GetDB()
sql = "" sql = ""
@@ -3408,6 +3486,10 @@ func GetSkuNamesNew(ctx *jxcontext.Context, keyword string, skuIDs, skuNameIDs [
sql += " AND t2.id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")" sql += " AND t2.id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")"
sqlParams = append(sqlParams, skuIDs) sqlParams = append(sqlParams, skuIDs)
} }
if bestSeller > 0 {
sql += " AND t1.best_seller = ? "
sqlParams = append(sqlParams, bestSeller)
}
if categoryID > 0 { if categoryID > 0 {
cat := &model.SkuCategory{} cat := &model.SkuCategory{}
cat.ID = categoryID cat.ID = categoryID
@@ -3502,3 +3584,10 @@ func GetSkuNamesNew(ctx *jxcontext.Context, keyword string, skuIDs, skuNameIDs [
} }
return skuNamesInfo, err return skuNamesInfo, err
} }
func SetSkuNameSeller(nameIds []int64, bastSeller int) error {
sql := ` UPDATE sku_name SET bast_seller = ? WHERE id IN (` + dao.GenQuestionMarks(len(nameIds)) + `)`
param := []interface{}{bastSeller, nameIds}
_, err := dao.ExecuteSQL(dao.GetDB(), sql, param...)
return err
}

View File

@@ -1125,10 +1125,56 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa
} }
} else { } else {
globals.SugarLogger.Debugf("UpdateStore track:%s, store:%s", ctx.GetTrackInfo(), utils.Format4Output(store, true)) globals.SugarLogger.Debugf("UpdateStore track:%s, store:%s", ctx.GetTrackInfo(), utils.Format4Output(store, true))
}
if status == -2 {
} }
return num, err return num, err
} }
//// updateVendorStoreStatusAndDeliveryStatus 当门店被禁用时,将三方平台和三方配送全部关闭
//func updateVendorStoreStatusAndDeliveryStatus(ctx *jxcontext.Context, storeId int) error {
// var (
// db = dao.GetDB()
// )
// // 获取门店绑定三方平台列表
// storeMap, err := dao.GetStoresMapList(db, nil, []int{storeId}, nil, 0, 0, "", "", "")
// if err != nil {
// return err
// }
// // 获取门店绑定的配送凭条
// storeCouriers, err := dao.GetOpenedStoreCouriersByStoreID(db, storeId, -1)
// if err != nil {
// return err
// }
//
// work := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
// var errList []error
// step := batchItemList[0].(int)
// switch step {
// case 0: // 同步修改门店营业撞他
// // 京东关店,本地店铺状态修改
// // 美团关店,本地店铺状态修改
// // 饿百关店,本地店铺状态修改
// // 抖音关店,本地店铺状态修改
// case 1: // 同步修改门店配送状态
// // 美团跑腿配送(没有门店状态修改,直接修改本店)
// // 蜂鸟配送,关闭(有)
// // 达达配送,关闭(有)
// // uu跑腿,关闭(不涉及门店概念,直接本地取消绑定信息)
// }
// return errList, nil
// }
// tasksch.NewParallelTask(
// "禁用门店,修改平台门店状态",
// tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(false),
// ctx,
// work,
// []int{0, 1},
// )
//
//}
func notifyStoreOperatorChanged(ctx *jxcontext.Context, storeID int, operatorRoleName, phone string, newPhone interface{}) { func notifyStoreOperatorChanged(ctx *jxcontext.Context, storeID int, operatorRoleName, phone string, newPhone interface{}) {
if phone != "" && newPhone != nil { if phone != "" && newPhone != nil {
db := dao.GetDB() db := dao.GetDB()
@@ -1780,6 +1826,7 @@ func UpdateStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendor
dao.Rollback(db, txDB) dao.Rollback(db, txDB)
return 0, err return 0, err
} }
isSyncStoreMapSku := false
if num > 0 { if num > 0 {
if globals.IsAddEvent { if globals.IsAddEvent {
mapBefore := refutil.FindMapAndStructMixed(valid, beforeStoreMap) mapBefore := refutil.FindMapAndStructMixed(valid, beforeStoreMap)
@@ -1794,6 +1841,7 @@ func UpdateStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendor
dao.Rollback(db, txDB) dao.Rollback(db, txDB)
return 0, err return 0, err
} }
isSyncStoreMapSku = true
} }
} else { } else {
if valid["pricePercentage"] != nil || valid["pricePercentagePack"] != nil { if valid["pricePercentage"] != nil || valid["pricePercentagePack"] != nil {
@@ -1804,7 +1852,27 @@ func UpdateStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendor
dao.Commit(db, txDB) dao.Commit(db, txDB)
if isStoreMapNeedSync(vendorID, valid) { if isStoreMapNeedSync(vendorID, valid) {
_, err = CurVendorSync.SyncStore(ctx, db, vendorID, storeID, false, userName) _, err = CurVendorSync.SyncStore(ctx, db, vendorID, storeID, false, userName)
globals.SugarLogger.Debug("CurVendorSync.SyncStore:err======%v", err) }
// 更新商品
if isSyncStoreMapSku {
globals.SugarLogger.Debugf("修改门店调价包是同步门店商品价格=============: %v", err)
singleStoreHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler)
task := tasksch.NewParallelTask("修改门店调价包的时候,同时同步门店商品", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
step := batchItemList[0].(int)
switch step {
case 1:
if singleStoreHandler != nil {
// 直接同步商品
err = syncStoreSkuNew(ctx, task, 0, true, vendorID, storeID, "", nil, nil, nil, false, true)
}
}
return retVal, err
}, []int{1})
tasksch.HandleTask(task, nil, true).Run()
_, err = task.GetResult(0)
return 0, err
} }
} }
} }

View File

@@ -3738,8 +3738,14 @@ func GetTopSkusByStoreIDs(ctx *jxcontext.Context, storeIDs []int) (storeSkuNameE
return storeSkuNameExt2, err return storeSkuNameExt2, err
} }
// GetTopSkusByCityCode 获取当前城市订单销量前一百的商品,排除掉商户已经可售的商品剩下的为热销推荐
func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNameAndPlaceList []*dao.SkuNameAndPlace, err error) { func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNameAndPlaceList []*dao.SkuNameAndPlace, err error) {
db := dao.GetDB() db := dao.GetDB()
store, err := dao.GetStoreDetail(db, storeID, -1, "")
if err != nil {
return nil, err
}
cityCode = store.CityCode
orderCreate := time.Now().AddDate(0, -1, 0) orderCreate := time.Now().AddDate(0, -1, 0)
var skuNameAndPlace []*dao.SkuNameAndPlace var skuNameAndPlace []*dao.SkuNameAndPlace
if cityCode > 0 { if cityCode > 0 {
@@ -3779,10 +3785,7 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam
for _, v := range skuNameList { for _, v := range skuNameList {
skuNameMap[v.ID] = v skuNameMap[v.ID] = v
} }
store, err := dao.GetStoreDetail(db, storeID, -1, "")
if err != nil {
return nil, err
}
var payPercentage int var payPercentage int
if store.PayPercentage < 50 { if store.PayPercentage < 50 {
payPercentage = 70 payPercentage = 70
@@ -5889,14 +5892,13 @@ func doStoreSkuAudit(ctx *jxcontext.Context, storeIDs []int, skuBindInfos []*Sto
} }
} }
for _, skuBindInfo := range skuBindInfos { for _, skuBindInfo := range skuBindInfos {
globals.SugarLogger.Debugf("doStoreSkuAudit storeID: %v , nameID: %v", storeID, skuBindInfo.NameID)
storeAudits, err := dao.GetStoreSkuAuditLight(db, []int{storeID}, []int{skuBindInfo.NameID}, model.StoreAuditStatusOnline) storeAudits, err := dao.GetStoreSkuAuditLight(db, []int{storeID}, []int{skuBindInfo.NameID}, model.StoreAuditStatusOnline)
//取消关注,可售排除 //取消关注,可售排除
if skuBindInfo.IsFocus == -1 || skuBindInfo.IsSale != 0 || skuBindInfo.UnitPrice == 0 { if skuBindInfo.IsFocus == -1 || skuBindInfo.IsSale != 0 || skuBindInfo.UnitPrice == 0 {
return false, err return false, err
} }
if ctx.GetLoginType() != weixin.AuthTypeMP && ctx.GetLoginType() != weixin.AuthTypeMini && ctx.GetLoginType() != weixin.AuthTypeWxApp && ctx.GetLoginType() != weixin.AuthTypeWxAppCaishi && ctx.GetLoginType() != auth2.AuthTypeMobile { if ctx.GetLoginType() != weixin.AuthTypeMP && ctx.GetLoginType() != weixin.AuthTypeMini && ctx.GetLoginType() != weixin.AuthTypeWxApp && ctx.GetLoginType() != weixin.AuthTypeWxAppCaishi && ctx.GetLoginType() != auth2.AuthTypeMobile && ctx.GetLoginType() != auth2.AuthTypePassword {
authInfo, err := ctx.GetV2AuthInfo() authInfo, err := ctx.GetV2AuthInfo()
if err == nil && authInfo != nil && (ctx.GetFullUser().Type&model.UserTypeOperator) != 0 { if err == nil && authInfo != nil && (ctx.GetFullUser().Type&model.UserTypeOperator) != 0 {
if len(storeAudits) > 0 { if len(storeAudits) > 0 {

View File

@@ -203,7 +203,6 @@ func SyncSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs []int,
} }
if err == nil && len(skuList) > 0 { if err == nil && len(skuList) > 0 {
// todo 按vendorID orgCode合并操作SyncSkus=============
task := tasksch.NewParallelTask( task := tasksch.NewParallelTask(
fmt.Sprintf("同步商品:%v,%v", nameIDs, skuIDs), fmt.Sprintf("同步商品:%v,%v", nameIDs, skuIDs),
tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, cc, skuList) tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, cc, skuList)

View File

@@ -0,0 +1,158 @@
package cms
import (
"fmt"
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/business/partner"
"git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm"
"git.rosy.net.cn/jx-callback/business/partner/putils"
"time"
)
// CopyOnStoreSkuToOther 将一个美团门店分类和商品复制到另一个门店
func CopyOnStoreSkuToOther(ctx *jxcontext.Context, fromVendorStoreId, toStoreId int, isAsync bool) (hint string, err error) {
var (
db = dao.GetDB()
)
// 门店api加载
// fromStore, err := dao.GetStoreDetail(db, fromStoreId, model.VendorIDMTWM, "")
if err != nil {
return "", err
}
toStore, err := dao.GetStoreDetail(db, toStoreId, model.VendorIDMTWM, "")
if err != nil {
return "", err
}
//fromApi := partner.CurAPIManager.GetAPI(model.VendorIDMTWM, toStore.VendorOrgCode).(*mtwmapi.API)
toApi := partner.CurAPIManager.GetAPI(model.VendorIDMTWM, toStore.VendorOrgCode).(*mtwmapi.API)
taskName := fmt.Sprintf("将平台门店[%d],分类和商品复制到[%d]", fromVendorStoreId, toStoreId)
config := tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(false)
work := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
step := batchItemList[0].(int)
switch step {
case 1:
// 1.加载门店商品,删除商品.当分类下没有商品时.删除分类
errs := LoadingStoreSkuList(ctx, toApi, toStore.VendorStoreID)
if errs != nil && len(errs) > 0 {
return nil, errs[0]
}
case 2:
// 同步分类
fromCategoryList, err := toApi.RetailCatList(utils.Int2Str(fromVendorStoreId))
if err != nil {
return nil, err
}
for _, v := range fromCategoryList {
if err := toApi.RetailCatUpdate(toStore.VendorStoreID, v.Name, &mtwmapi.Param4UpdateCat{
CategoryCode: v.Code,
Sequence: v.Sequence,
}); err != nil {
return nil, err
}
if v.Children != nil && len(v.Children) != 0 {
for _, c := range v.Children {
if err := toApi.RetailCatUpdate(toStore.VendorStoreID, v.Name, &mtwmapi.Param4UpdateCat{
CategoryCode: v.Code,
SecondaryCategoryCode: c.Code,
SecondaryCategoryName: c.Name,
Sequence: c.Sequence,
}); err != nil {
return nil, err
}
}
}
}
case 3:
// 同步商品
fromFoodList, err1 := toApi.RetailListAll(utils.Int2Str(fromVendorStoreId))
if err1 != nil {
return nil, err1
}
if err := BatchInitData(ctx, fromFoodList, toApi, toStore.VendorStoreID); err != nil {
return nil, err
}
}
return
}
task := tasksch.NewParallelTask(taskName, config, ctx, work, []int{1, 2, 3})
tasksch.HandleTask(task, nil, true).Run()
if !isAsync {
_, err = task.GetResult(0)
hint = "1"
} else {
hint = task.ID
}
return hint, err
}
func LoadingStoreSkuList(ctx *jxcontext.Context, api *mtwmapi.API, poiCode string) (err []error) {
foodList, err1 := api.RetailListAll(poiCode)
if err1 != nil {
return append(err, err1)
}
i := 0
for _, v := range foodList {
err1 := api.RetailDelete(ctx.GetTrackInfo(), poiCode, v.AppFoodCode)
if err1 != nil {
err = append(err, err1)
}
if i%40 == 0 {
time.Sleep(200 * time.Millisecond)
}
i++
}
return
}
// BatchInitData 批量创建商品
func BatchInitData(ctx *jxcontext.Context, fromSku []*mtwmapi.AppFood, toApi *mtwmapi.API, vendorStoreID string) error {
foodDataList := make([]map[string]interface{}, len(fromSku))
for i, storeSku := range fromSku {
foodData := make(map[string]interface{})
foodDataList[i] = foodData
foodData[mtwmapi.KeyAppFoodCode] = storeSku.AppFoodCode
foodData["skus"] = storeSku.Skus
foodData["name"] = utils.LimitUTF8StringLen(storeSku.Name, mtwmapi.MaxSkuNameCharCount)
foodData["description"] = storeSku.Description
foodData["price"] = storeSku.Price
if storeSku.MinOrderCount != 0 {
foodData["min_order_count"] = storeSku.MinOrderCount
} else {
foodData["min_order_count"] = 1
}
foodData["unit"] = storeSku.Unit
attr := mtwm.SwitchAttr(int64(storeSku.TagID))
if attr != "" {
foodData["common_attr_value"] = attr
}
foodData["category_code"] = storeSku.CategoryCode
foodData["category_name"] = storeSku.CategoryName
foodData["is_sold_out"] = storeSku.IsSoldOut
foodData["picture"] = storeSku.Picture
foodData["picture_contents"] = storeSku.PictureContents
foodData["sequence"] = storeSku.Sequence
foodData["tag_id"] = storeSku.TagID
}
failedFoodList, err2 := toApi.RetailBatchInitData(ctx.GetTrackInfo(), vendorStoreID, foodDataList)
if err := err2; err == nil {
if err = putils.GenPartialFailedErr(failedFoodList, len(failedFoodList)); err != nil {
return err
}
} else if err2 != nil && len(failedFoodList) == 0 {
if errExt, ok := err2.(*utils.ErrorWithCode); ok {
return utils.UnmarshalUseNumber([]byte(errExt.ErrMsg()), &failedFoodList)
}
}
return nil
}

View File

@@ -50,7 +50,7 @@ var (
"21:30:00", "21:30:00",
} }
dailyWorkTimeList2 = []string{ dailyWorkTimeList2 = []string{
"2:00:00", "02:30:00",
} }
priceReferTimeList = []string{ priceReferTimeList = []string{
"03:00:00", "03:00:00",
@@ -253,7 +253,7 @@ func Init() {
orderman.FixedOrderManager.AmendMissingOrders(jxcontext.AdminCtx, []int{model.VendorIDJD, model.VendorIDMTWM, model.VendorIDEBAI, model.VendorIDDD}, 0, curDate, curDate, true, true) orderman.FixedOrderManager.AmendMissingOrders(jxcontext.AdminCtx, []int{model.VendorIDJD, model.VendorIDMTWM, model.VendorIDEBAI, model.VendorIDDD}, 0, curDate, curDate, true, true)
}, 5*time.Second, 10*time.Minute) }, 5*time.Second, 10*time.Minute)
// 抖音更新门店商品 // 抖音更新门店商品 ,接口收费暂不使用
if beego.BConfig.RunMode != "jxgy" { if beego.BConfig.RunMode != "jxgy" {
ScheduleTimerFunc("RefreshSyncSkuList", func() { ScheduleTimerFunc("RefreshSyncSkuList", func() {
syncStoreSkuTiktok() syncStoreSkuTiktok()
@@ -368,10 +368,10 @@ func Init() {
ScheduleTimerFunc("GetNewVendorPopActs", func() { ScheduleTimerFunc("GetNewVendorPopActs", func() {
act.GetNewVendorPopActs(jxcontext.AdminCtx) act.GetNewVendorPopActs(jxcontext.AdminCtx)
}, dailyHeartbeat) }, dailyHeartbeat)
//企业微信群人数通告 //企业微信群人数通告(暂时取消)
ScheduleTimerFunc("SendQywxPeopleCount", func() { //ScheduleTimerFunc("SendQywxPeopleCount", func() {
cms.SendQywxPeopleCount(jxcontext.AdminCtx) // cms.SendQywxPeopleCount(jxcontext.AdminCtx)
}, dailyHeartbeat) //}, dailyHeartbeat)
ScheduleTimerFunc("doDailyWork1", func() { ScheduleTimerFunc("doDailyWork1", func() {
//同步商品额外前缀和水印图(打标记) //同步商品额外前缀和水印图(打标记)
cms.SyncSkuExperfixAndWatermark(jxcontext.AdminCtx) cms.SyncSkuExperfixAndWatermark(jxcontext.AdminCtx)

View File

@@ -495,6 +495,8 @@ func GuessVendorIDFromVendorStoreID(vendorStoreID int64) (vendorID int) {
// vendorID = model.VendorIDWSC // vendorID = model.VendorIDWSC
} else if vendorStoreID > 123456 && vendorStoreID < 654321 { // 京西门店ID6位 } else if vendorStoreID > 123456 && vendorStoreID < 654321 { // 京西门店ID6位
vendorID = model.VendorIDJX vendorID = model.VendorIDJX
} else if vendorStoreID >= 100000000 { // 饿百出现九未id
vendorID = model.VendorIDEBAI
} }
return vendorID return vendorID
} }

View File

@@ -17,12 +17,12 @@ func init() {
} }
func TestSendSMSMsg(t *testing.T) { func TestSendSMSMsg(t *testing.T) {
err := SendVoiceMsg([]string{"18981810340"}, "tts_222871733", map[string]interface{}{ //err := SendVoiceMsg([]string{"18981810340"}, "tts_222871733", map[string]interface{}{
"tel": "18981810340", // "tel": "18981810340",
}) //})
aa := map[string]interface{}{"tel": "13957767601"} aa := map[string]interface{}{"tel": "18981810340"}
request := &dyvmsapiclient.SingleCallByTtsRequest{ request := &dyvmsapiclient.SingleCallByTtsRequest{
CalledNumber: tea.String("13957767601"), CalledNumber: tea.String("18981810340"),
TtsCode: tea.String("tts_222871733"), TtsCode: tea.String("tts_222871733"),
TtsParam: tea.String(string(utils.MustMarshal(aa))), TtsParam: tea.String(string(utils.MustMarshal(aa))),
} }

View File

@@ -47,6 +47,7 @@ func NotifyNewOrder(order *model.GoodsOrder) {
msg.OrderSqs = utils.Int2Str(order.OrderSeq) msg.OrderSqs = utils.Int2Str(order.OrderSeq)
msg.StoreTitle = storeDetail.Name msg.StoreTitle = storeDetail.Name
msg.Context = "老板,你有新的订单了!" msg.Context = "老板,你有新的订单了!"
msg.VendorOrderId = order.VendorOrderID
context, _ := json.Marshal(msg) context, _ := json.Marshal(msg)
body := fmt.Sprintf(msg.Context+"(%s)", model.VendorChineseNames[order.VendorID]+"#"+msg.OrderSqs) body := fmt.Sprintf(msg.Context+"(%s)", model.VendorChineseNames[order.VendorID]+"#"+msg.OrderSqs)
pushMsgByUniApp(storeDetail.ID, storeDetail.Name, cid, string(context), body, SoundsFileNewOrder) pushMsgByUniApp(storeDetail.ID, storeDetail.Name, cid, string(context), body, SoundsFileNewOrder)
@@ -175,11 +176,12 @@ func GetStoreBoosCID(storeId int) ([]string, error) {
} }
type MsgContext struct { type MsgContext struct {
MsgType string `json:"msg_type"` // 订单类型[新订单/售后单/取消单] MsgType string `json:"msg_type"` // 订单类型[新订单/售后单/取消单]
StoreTitle string `json:"store_title"` // 门店名称 StoreTitle string `json:"store_title"` // 门店名称
Context string `json:"context"` // 消息文本 Context string `json:"context"` // 消息文本
VendorName string `json:"vendor_name"` // 平台名称 VendorName string `json:"vendor_name"` // 平台名称
OrderSqs string `json:"order_sqs"` // 订单流水号 OrderSqs string `json:"order_sqs"` // 订单流水号
VendorOrderId string `json:"vendor_order_id"` // 订单id
} }
func pushMsgByUniApp(storeId int, storeName string, cID []string, msg string, body string, soundsFileName string) { func pushMsgByUniApp(storeId int, storeName string, cID []string, msg string, body string, soundsFileName string) {

View File

@@ -68,6 +68,8 @@ type GoodsOrderExt struct {
OperatorPhone3 string `orm:"size(16)" json:"operatorPhone3"` // 饿百运营人电话 OperatorPhone3 string `orm:"size(16)" json:"operatorPhone3"` // 饿百运营人电话
OperatorName3 string `orm:"size(32)" json:"operatorName3"` // 饿百运营人组(角色) OperatorName3 string `orm:"size(32)" json:"operatorName3"` // 饿百运营人组(角色)
VendorPayType string `json:"vendorPayType"` // 支付方式,当订单来源小程序时通过支付方式区分订单来源(w06微信/tt抖音/ks快手/支付宝)
} }
type OrderSkuExt struct { type OrderSkuExt struct {

View File

@@ -25,7 +25,8 @@ const (
VendorGoMei = 12 // 国美 VendorGoMei = 12 // 国美
VendorIDTT = 13 // 抖音平台小程序 VendorIDTT = 13 // 抖音平台小程序
VendorIDDD = 14 // 抖店 VendorIDDD = 14 // 抖店
VendorIDPurchaseEnd = 15 VendorIDKS = 15 // 快手小程序
VendorIDPurchaseEnd = 20
VendorIDWXPay = 51 // 微信支付 VendorIDWXPay = 51 // 微信支付

View File

@@ -567,7 +567,7 @@ func IsWaybillFinalStatus(status int) bool {
const ( const (
JXC4AppId = "wx4b5930c13f8b1170" // 京西菜市appId type=weixinmini JXC4AppId = "wx4b5930c13f8b1170" // 京西菜市appId type=weixinmini
JXC4BusinessAppId = "wx08a5c2a8581414ff" // 京西商家appId type=weixinmini JXC4BusinessAppId = "wx08a5c2a8581414ff" // 京西商家appId type=weixinmini
JXC4TiktokAppId = "tta6a1d01c399f264201" // 抖音appID JXC4TiktokAppId = "ttaceeda5333d7a7ab01" // 抖音appID
JXC4ClientAppID = "wxf3657c94aa01a3f0" //京西菜市客户端APP ID type="weixinapp" JXC4ClientAppID = "wxf3657c94aa01a3f0" //京西菜市客户端APP ID type="weixinapp"

View File

@@ -37,6 +37,9 @@ type StoresOrderSaleInfo struct {
WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费 WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费
RealEarningPrice int64 `json:"realEarningPrice"` RealEarningPrice int64 `json:"realEarningPrice"`
PlatformSettlement int64 `json:"platformSettlement"` // 真实订单的平台结算(无扣点)
ActualFee int64 `json:"actualFee"` // 真三方运单配送费
} }
type OrderSkuWithActualPayPrice struct { type OrderSkuWithActualPayPrice struct {
@@ -411,6 +414,60 @@ func GetStoreOrderSkuList(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAt
return skuList, err return skuList, err
} }
type TotalShopMoney struct {
TotalShopMoney int64 `json:"totalShopMoney"`
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
}
// GetPlatformSettlement 统计平台的结算信息
func GetPlatformSettlement(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAtEnd time.Time) ([]*TotalShopMoney, error) {
sql := `
SELECT SUM(t2.total_shop_money) total_shop_money,t2.vendor_id FROM goods_order t2 WHERE t2.order_finished_at >= ? AND t2.order_finished_at <= ?
`
sqlParams := []interface{}{
finishedAtBegin,
finishedAtEnd,
}
if len(storeIDs) > 0 {
sql += " AND IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) IN (" + GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs)
}
sql += ` AND t2.status = ? GROUP BY t2.vendor_id`
sqlParams = append(sqlParams, model.OrderStatusFinished)
var total []*TotalShopMoney
err := GetRows(db, &total, sql, sqlParams...)
return total, err
}
type DeliveryFee struct {
ActualFee int64 `json:"actualFee"`
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
}
// GetPlatformDesiredFee 统计平台的订单的配送费信息
func GetPlatformDesiredFee(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAtEnd time.Time) (fee []*DeliveryFee, err error) {
sql := `
SELECT sum(b.actual_fee) actual_fee,b.order_vendor_id vendor_id FROM goods_order t2
RIGHT JOIN waybill b ON t2.vendor_order_id = b.vendor_order_id AND b.status IN (?,?) AND b.vendor_order_id <> b.vendor_waybill_id
WHERE t2.order_finished_at >= ? AND t2.order_finished_at <= ?
`
sqlParams := []interface{}{
model.WaybillStatusDelivered,
110,
finishedAtBegin,
finishedAtEnd,
}
if len(storeIDs) > 0 {
sql += " AND IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) IN (" + GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs)
}
sql += ` GROUP BY b.order_vendor_id `
err = GetRows(db, &fee, sql, sqlParams...)
return
}
func GetStoreOrderSkuList4Afs(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAtEnd time.Time, isFinish bool) (skuList []*OrderSkuWithActualPayPrice, err error) { func GetStoreOrderSkuList4Afs(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAtEnd time.Time, isFinish bool) (skuList []*OrderSkuWithActualPayPrice, err error) {
sql := ` sql := `
SELECT t1.*, SELECT t1.*,
@@ -458,6 +515,7 @@ func GetStoreOrderSkuList4Afs2(db *DaoDB, vendorOrderIDs []string) (skuList []*O
` `
sqlParams = append(sqlParams, vendorOrderIDs) sqlParams = append(sqlParams, vendorOrderIDs)
} }
err = GetRows(db, &skuList, sql, sqlParams...) err = GetRows(db, &skuList, sql, sqlParams...)
return skuList, err return skuList, err
} }
@@ -502,6 +560,23 @@ func GetStoreAfsOrderSkuList2(db *DaoDB, vendorOrderIDs []string) (afsSkuList []
sql += " AND t2.vendor_order_id IN (" + GenQuestionMarks(len(vendorOrderIDs)) + ")" sql += " AND t2.vendor_order_id IN (" + GenQuestionMarks(len(vendorOrderIDs)) + ")"
sqlParams = append(sqlParams, vendorOrderIDs) sqlParams = append(sqlParams, vendorOrderIDs)
} }
err = GetRows(db, &afsSkuList, sql, sqlParams...)
return afsSkuList, err
}
func GetOrderRefundSkuList(db *DaoDB, vendorOrderIDs []string) (afsSkuList []*model.OrderSkuFinancial, err error) {
sql := `
SELECT t1.*
FROM order_sku_financial t1
JOIN afs_order t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id AND t2.afs_order_id = t1.afs_order_id
WHERE t1.is_afs_order = 1
`
sqlParams := []interface{}{}
if len(vendorOrderIDs) > 0 {
sql += " AND t2.vendor_order_id IN (" + GenQuestionMarks(len(vendorOrderIDs)) + ")"
sqlParams = append(sqlParams, vendorOrderIDs)
}
err = GetRows(db, &afsSkuList, sql, sqlParams...) err = GetRows(db, &afsSkuList, sql, sqlParams...)
return afsSkuList, err return afsSkuList, err
} }
@@ -826,7 +901,7 @@ func GetOrders(db *DaoDB, ids []int64, isIncludeSku, isIncludeFake bool, fromDat
t5.pay_percentage, t5.comment ,t5.old_pay_percentage, t5.market_man_phone, tu.name market_man_name, t5.pay_percentage, t5.comment ,t5.old_pay_percentage, t5.market_man_phone, tu.name market_man_name,
t5.operator_phone, t5.operator_phone2, t5.operator_phone3, tu1.name operator_name, tu2.name operator_name2, tu3.name operator_name3, t5.operator_phone, t5.operator_phone2, t5.operator_phone3, tu1.name operator_name, tu2.name operator_name2, tu3.name operator_name3,
t6.vendor_pay_percentage, t6.vendor_pay_percentage,
city.name city_name, district.name district_name, city.name city_name, district.name district_name,op.vendor_pay_type,
ROUND(IF(t1.earning_type = 1, t1.total_shop_money-t1.earning_price-IFNULL(t2.desired_fee,0), t1.total_shop_money *(t1.order_pay_percentage/2)/100)) jx_income`, model.DefaultEarningPricePercentage) ROUND(IF(t1.earning_type = 1, t1.total_shop_money-t1.earning_price-IFNULL(t2.desired_fee,0), t1.total_shop_money *(t1.order_pay_percentage/2)/100)) jx_income`, model.DefaultEarningPricePercentage)
if isIncludeSku { if isIncludeSku {
sql += `, sql += `,
@@ -849,6 +924,7 @@ func GetOrders(db *DaoDB, ids []int64, isIncludeSku, isIncludeFake bool, fromDat
LEFT JOIN user tu1 ON tu1.mobile = t5.operator_phone LEFT JOIN user tu1 ON tu1.mobile = t5.operator_phone
LEFT JOIN user tu2 ON tu2.mobile = t5.operator_phone2 LEFT JOIN user tu2 ON tu2.mobile = t5.operator_phone2
LEFT JOIN user tu3 ON tu3.mobile = t5.operator_phone3 LEFT JOIN user tu3 ON tu3.mobile = t5.operator_phone3
LEFT JOIN order_pay op ON op.vendor_order_id = t1.vendor_order_id
-- LEFT JOIN (SELECT MAX(created_at), afs_order_id, vendor_order_id, vendor_id FROM afs_order WHERE status = 180 GROUP BY 2, 3, 4) t7 ON t7.vendor_order_id = t1.vendor_order_id AND t7.vendor_id = t1.vendor_id -- LEFT JOIN (SELECT MAX(created_at), afs_order_id, vendor_order_id, vendor_id FROM afs_order WHERE status = 180 GROUP BY 2, 3, 4) t7 ON t7.vendor_order_id = t1.vendor_order_id AND t7.vendor_id = t1.vendor_id
-- LEFT JOIN afs_order t8 ON t8.afs_order_id = t7.afs_order_id -- LEFT JOIN afs_order t8 ON t8.afs_order_id = t7.afs_order_id
` `
@@ -943,7 +1019,6 @@ func GetOrders(db *DaoDB, ids []int64, isIncludeSku, isIncludeFake bool, fromDat
} else { } else {
sqlWhere += " AND IF(t1.jx_store_id != 0, t1.jx_store_id, t1.store_id) IN (" + GenQuestionMarks(len(storeIDs)) + ")" sqlWhere += " AND IF(t1.jx_store_id != 0, t1.jx_store_id, t1.store_id) IN (" + GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs) sqlParams = append(sqlParams, storeIDs)
//globals.SugarLogger.Debugf("sqlParams storeIDs========%d", storeIDs)
} }
} }
} }
@@ -1821,8 +1896,8 @@ func GetOrderStoreIDs(db *DaoDB, beginAt, endAt time.Time, vendorID int) (storeI
// GetOrderListByStoreList 根据门店id获取正在刷单的门店商品 // GetOrderListByStoreList 根据门店id获取正在刷单的门店商品
func GetOrderListByStoreList(db *DaoDB, storeId []int64) (order []*model.GoodsOrder, err error) { func GetOrderListByStoreList(db *DaoDB, storeId []int64) (order []*model.GoodsOrder, err error) {
sql := `SELECT * FROM goods_order g WHERE g.order_created_at >= ? AND g.order_created_at <= ? AND g.jx_store_id IN (` + GenQuestionMarks(len(storeId)) + `)` + `AND g.vendor_id = ? AND g.status < ?` sql := `SELECT * FROM goods_order g WHERE g.order_created_at >= ? AND g.order_created_at <= ? AND g.jx_store_id IN (` + GenQuestionMarks(len(storeId)) + `)` + `AND g.vendor_id IN (` + GenQuestionMarks(2) + `)` + `AND g.status < ?`
sqlParam := []interface{}{time.Now().AddDate(0, 0, -5), time.Now().AddDate(0, 0, 1), storeId, model.VendorIDDD, model.OrderStatusDelivering} sqlParam := []interface{}{time.Now().AddDate(0, 0, -5), time.Now().AddDate(0, 0, 1), storeId, []int{model.VendorIDDD, model.VendorIDEBAI}, model.OrderStatusDelivering}
if err := GetRows(db, &order, sql, sqlParam...); err != nil { if err := GetRows(db, &order, sql, sqlParam...); err != nil {
return nil, err return nil, err

View File

@@ -1285,7 +1285,7 @@ func GetTopSkusByCityCode(db *DaoDB, cityCode int, orderCreate time.Time) (skuNa
AND b.sale_price > ? AND b.sale_price > ?
AND a.order_created_at BETWEEN ? and NOW() AND a.order_created_at BETWEEN ? and NOW()
GROUP BY 2,3,4 GROUP BY 2,3,4
ORDER BY count DESC ORDER BY count DESC LIMIT 100
` `
sqlParams := []interface{}{ sqlParams := []interface{}{
utils.DefaultTimeValue, utils.DefaultTimeValue,

View File

@@ -11,9 +11,10 @@ const (
) )
const ( const (
PayTypeWX = 1 // 微信支付 PayTypeWX = 1 // 微信支付
PayTypeTL = 2 // 通联宝支付 PayTypeTL = 2 // 通联宝支付
PayTypeTicTok = 3 // 抖音支付 PayTypeTicTok = 3 // 抖音支付
PayTypeKuaiShou = 4 // 快手支付
PayTypeTL_DiscountCard = 3 // 通联宝支付(会员折扣卡) PayTypeTL_DiscountCard = 3 // 通联宝支付(会员折扣卡)
PayTypeTL_StoreAcctPay = 4 // 通联宝支付(门店账户充值) PayTypeTL_StoreAcctPay = 4 // 通联宝支付(门店账户充值)
@@ -135,32 +136,31 @@ type GoodsOrder struct {
DeliveryType string `orm:"size(32)" json:"deliveryType"` // 订单配送方式,缺省是平台配送 DeliveryType string `orm:"size(32)" json:"deliveryType"` // 订单配送方式,缺省是平台配送
CreateDeliveryType int `orm:"default(0)" json:"createDeliveryType"` //默认0系统发单1为门店发单 CreateDeliveryType int `orm:"default(0)" json:"createDeliveryType"` //默认0系统发单1为门店发单
VendorWaybillID string `orm:"column(vendor_waybill_id);size(48)" json:"vendorWaybillID"` VendorWaybillID string `orm:"column(vendor_waybill_id);size(48)" json:"vendorWaybillID"`
WaybillVendorID int `orm:"column(waybill_vendor_id)" json:"waybillVendorID"` // 表示当前承运商,-1表示还没有安排 WaybillVendorID int `orm:"column(waybill_vendor_id)" json:"waybillVendorID"` // 表示当前承运商,-1表示还没有安排
AdjustCount int8 `json:"adjustCount"` // 调整单(次数) AdjustCount int8 `json:"adjustCount"` // 调整单(次数)
DeliveryFlag int8 `json:"deliveryFlag"` // 第1位为1表示禁止调度器调度三方配送 DeliveryFlag int8 `json:"deliveryFlag"` // 第1位为1表示禁止调度器调度三方配送
DuplicatedCount int `json:"-"` // 重复新订单消息数这个一般不是由于消息重发造成的消息重发由OrderStatus过滤一般是业务逻辑造成的 DuplicatedCount int `json:"-"` // 重复新订单消息数这个一般不是由于消息重发造成的消息重发由OrderStatus过滤一般是业务逻辑造成的
OrderCreatedAt time.Time `orm:"type(datetime);index" json:"orderCreatedAt"` // 这里记录的是订单生效时间,即用户支付完成(货到付款即为下单时间) OrderCreatedAt time.Time `orm:"type(datetime);index" json:"orderCreatedAt"` // 这里记录的是订单生效时间,即用户支付完成(货到付款即为下单时间)
OrderFinishedAt time.Time `orm:"type(datetime)" json:"orderFinishedAt"` OrderFinishedAt time.Time `orm:"type(datetime)" json:"orderFinishedAt"`
StatusTime time.Time `orm:"type(datetime)" json:"statusTime"` // last status time StatusTime time.Time `orm:"type(datetime)" json:"statusTime"` // last status time
PickDeadline time.Time `orm:"type(datetime);null" json:"pickDeadline"` PickDeadline time.Time `orm:"type(datetime);null" json:"pickDeadline"`
DeliveryFeeFrom *time.Time `orm:"type(datetime);null" json:"deliveryFeeFrom,omitempty"` // 三方配置费计算的开始基准时间 DeliveryFeeFrom *time.Time `orm:"type(datetime);null" json:"deliveryFeeFrom,omitempty"` // 三方配置费计算的开始基准时间
ModelTimeInfo `json:"-"` ModelTimeInfo `json:"-"` // 1
Flag int `json:"flag"` //非运单调整相关的其它状态 Flag int `json:"flag"` // 非运单调整相关的其它状态
InvoiceTitle string `orm:"size(64)" json:"invoiceTitle"` // 发票抬头
InvoiceTitle string `orm:"size(64)" json:"invoiceTitle"` // 发票抬头 InvoiceTaxerID string `orm:"size(32);column(invoice_taxer_id)" json:"invoiceTaxerID"` // 发票纳税人识别码
InvoiceTaxerID string `orm:"size(32);column(invoice_taxer_id)" json:"invoiceTaxerID"` // 发票纳税人识别码 InvoiceEmail string `orm:"size(64)" json:"invoiceEmail"` // 发票邮箱
InvoiceEmail string `orm:"size(64)" json:"invoiceEmail"` // 发票邮箱 VendorOrgCode string `orm:"size(64)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空
VendorOrgCode string `orm:"size(64)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空 FromStoreID int `orm:"column(from_store_id)" json:"fromStoreID"` // 物料配送门店
FromStoreID int `orm:"column(from_store_id)" json:"fromStoreID"` //物料配送门店 EclpOutID string `orm:"column(eclp_out_id)" json:"eclpOutID"` // 物料配送的出库单号
EclpOutID string `orm:"column(eclp_out_id)" json:"eclpOutID"` //物料配送的出库单号 AddressID int64 `orm:"column(address_id)" json:"addressID"` // 配送地址ID
AddressID int64 `orm:"column(address_id)" json:"addressID"` //配送地址ID EarningType int `json:"earningType"` // 订单结算方式2为扣点1为报价
EarningType int `json:"earningType"` //订单结算方式2为扣点1为报价 OrderType int `json:"orderType"` // 订单类型0为普通订单1为物料订单2为进货订单
OrderType int `json:"orderType"` //订单类型0为普通订单1为物料订单2为进货订单 OrderPayPercentage int `json:"orderPayPercentage"` // 调价包?
OrderPayPercentage int `json:"orderPayPercentage"` CouponIDs string `orm:"column(coupon_ids)" json:"couponIDs"` // 优惠券IDs京西商城
CouponIDs string `orm:"column(coupon_ids)" json:"couponIDs"` //优惠券IDs京西商城 NotifyType int `json:"notifyType"` // 0表示没有通知1表示发的短信2表示发的语音
NotifyType int `json:"notifyType"` //0表示没有通知1表示发的短信2表示发的语音 PhoneAscription string `orm:"column(phone_ascription)" json:"phoneAscription"` // 电话号码归属地,{代表抖音号码归宿地[yes-四川成都]}
PhoneAscription string `orm:"column(phone_ascription)" json:"phoneAscription"` // 电话号码归属地
// 以下只是用于传递数据 // 以下只是用于传递数据
OriginalData string `orm:"-" json:"-"` OriginalData string `orm:"-" json:"-"`
@@ -244,7 +244,7 @@ type Waybill struct {
ModelTimeInfo `json:"-"` ModelTimeInfo `json:"-"`
OriginalData string `orm:"type(text)" json:"-"` OriginalData string `orm:"type(text)" json:"-"`
Remark string `orm:"-" json:"-"` // 用于传递remark Remark string `orm:"-" json:"-"` // 用于传递remark
//PunctualFee int64 `orm:"column(punctual_fee)" json:"punctualFee"` // 对应美团外卖运单的准时保险费
VendorOrgCode string `orm:"size(64)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空 VendorOrgCode string `orm:"size(64)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空
} }

View File

@@ -325,7 +325,7 @@ type Store struct {
AutoEnableAt *time.Time `orm:"type(datetime);null" json:"autoEnableAt"` // 自动营业时间(临时休息用) AutoEnableAt *time.Time `orm:"type(datetime);null" json:"autoEnableAt"` // 自动营业时间(临时休息用)
ChangePriceType int8 `json:"changePriceType"` // 修改价格类型,即是否需要审核 ChangePriceType int8 `json:"changePriceType"` // 修改价格类型,即是否需要审核
SMSNotify int8 `orm:"column(sms_notify);" json:"smsNotify"` // 是否通过短信接收订单消息(每天只推一条) SMSNotify int8 `orm:"column(sms_notify);" json:"smsNotify"` // 是否通过短信接收订单消息(每天只推一条)
SMSNotifyMark int8 `orm:"column(sms_notify_mark);" json:"smsNotifyMark"` //今天是否已经推送过订单消息 SMSNotifyMark int8 `orm:"column(sms_notify_mark);" json:"smsNotifyMark"` // 今天是否已经推送过订单消息
AutoReplyType int8 `json:"autoReplyType"` // 订单评价自动回复类型 AutoReplyType int8 `json:"autoReplyType"` // 订单评价自动回复类型
LinkStoreID int `orm:"column(link_store_id);default(0);index" json:"linkStoreID"` // 关联门店ID LinkStoreID int `orm:"column(link_store_id);default(0);index" json:"linkStoreID"` // 关联门店ID
StoreLevel string `orm:"default(C);size(32)" json:"storeLevel"` // 门店等级(筛选用,京西的) StoreLevel string `orm:"default(C);size(32)" json:"storeLevel"` // 门店等级(筛选用,京西的)

View File

@@ -152,7 +152,6 @@ func GetMsg(ctx *jxcontext.Context, storeID int, lastOrderTime time.Time, lastOr
} }
close(chan2Listen) close(chan2Listen)
} else { } else {
globals.SugarLogger.Debugf("GetMsg vendorOrderIDs:%s", utils.Format4Output(vendorOrderIDs, true))
msg.MsgData = len(vendorOrderIDs) msg.MsgData = len(vendorOrderIDs)
} }
storeMap, _ := permission.GetUserStoresResultMap(ctx.GetUserID()) storeMap, _ := permission.GetUserStoresResultMap(ctx.GetUserID())
@@ -215,7 +214,6 @@ func OnNewWait4ApproveAfsOrder(order *model.AfsOrder) {
} }
func OnKeyAfsOrderStatusChanged(order *model.AfsOrder) { func OnKeyAfsOrderStatusChanged(order *model.AfsOrder) {
globals.SugarLogger.Debugf("msghub OnKeyAfsOrderStatusChanged, order:%s", utils.Format4Output(order, true))
utils.CallFuncAsync(func() { utils.CallFuncAsync(func() {
msgChan <- &ServerMsg{ msgChan <- &ServerMsg{
Type: ServerMsgKeyAfsOrderStatusChanged, Type: ServerMsgKeyAfsOrderStatusChanged,

View File

@@ -199,7 +199,6 @@ func GetAndStoreCitiesShops(ctx *jxcontext.Context, vendorIDs []int, cityCodeLis
} }
}() }()
for _, v := range shopList { for _, v := range shopList {
globals.SugarLogger.Debugf("GetAndStoreCitiesShops cityCode:%d, 平台:%s, shopID:%s, districtCode:%d", cityCode, model.VendorChineseNames[v.VendorID], v.VendorStoreID, v.DistrictCode)
if v.DistrictCode > 0 { if v.DistrictCode > 0 {
tmpShop := *v tmpShop := *v
dao.DeleteEntity(db, &tmpShop, model.FieldVendorStoreID, model.FieldVendorID) dao.DeleteEntity(db, &tmpShop, model.FieldVendorStoreID, model.FieldVendorID)

View File

@@ -29,7 +29,6 @@ func CallCreateWaybillPolicy(deliveryFee, maxDeliveryFee int64, order *model.Goo
if deliveryFee > maxDeliveryFee { if deliveryFee > maxDeliveryFee {
errStr := fmt.Sprintf("超最高限价, 所需运费:%s, 最高限价:%s", jxutils.IntPrice2StandardCurrencyString(deliveryFee), jxutils.IntPrice2StandardCurrencyString(maxDeliveryFee)) errStr := fmt.Sprintf("超最高限价, 所需运费:%s, 最高限价:%s", jxutils.IntPrice2StandardCurrencyString(deliveryFee), jxutils.IntPrice2StandardCurrencyString(maxDeliveryFee))
err = fmt.Errorf(errStr) err = fmt.Errorf(errStr)
globals.SugarLogger.Debugf("CallCreateWaybillPolicy orderID:%s, 平台:%s运单创建出错:%s", order.VendorOrderID, model.VendorChineseNames[waybillVendorID], errStr)
} }
return err return err
} }

View File

@@ -220,6 +220,52 @@ func UpdateOrder2Complete() {
return return
} }
func makeRiderInfo(fakeWayBill *model.Waybill, riderInfo *mtpsapi.RiderInfo) {
switch fakeWayBill.Status {
case 5: // 呼叫骑手
riderInfo.LogisticsContext = "呼叫骑手,新建运单"
riderInfo.LogisticsStatus = 0
riderInfo.CourierName = ""
riderInfo.CourierPhone = ""
riderInfo.OpCode = tiktok_api.TiktokLogisticsStatusCALLRIDER
// 下一状态以及推送时间
fakeWayBill.Status = model.WaybillStatusCourierAssigned
fakeWayBill.VendorStatus = utils.Int64ToStr(model.WaybillStatusCourierAssigned)
case 12: // 骑手接单
riderInfo.LogisticsContext = model.RiderWaitGetGoods
riderInfo.LogisticsStatus = 12
riderInfo.OpCode = tiktok_api.TiktokLogisticsORDERRECEIVED
// 下一状态以及推送时间
fakeWayBill.Status = model.WaybillStatusCourierArrived
fakeWayBill.VendorStatus = utils.Int64ToStr(model.WaybillStatusCourierArrived)
case 15: // 到店
riderInfo.LogisticsContext = model.RiderToStore
riderInfo.LogisticsStatus = 15
riderInfo.OpCode = tiktok_api.TiktokLogisticsRIDERARRIVED
// 下一状态以及推送时间
fakeWayBill.Status = model.WaybillStatusDelivering
fakeWayBill.VendorStatus = utils.Int64ToStr(model.WaybillStatusDelivering)
case 20: //配送中
riderInfo.LogisticsContext = model.RiderGetOrderDelivering
riderInfo.LogisticsStatus = 20
riderInfo.OpCode = tiktok_api.TiktokLogisticsRIDERPICKUP
// 下一状态以及推送时间
fakeWayBill.Status = model.WaybillStatusDelivered
fakeWayBill.VendorStatus = utils.Int64ToStr(model.WaybillStatusDelivered)
case 105: // 完成
riderInfo.LogisticsContext = model.RiderGetOrderDelivered
riderInfo.LogisticsStatus = 40
riderInfo.OpCode = tiktok_api.TiktokLogisticsDELIVERED
// 下一状态以及推送时间
fakeWayBill.Status = model.WaybillStatusFailed
fakeWayBill.VendorStatus = utils.Int64ToStr(model.WaybillStatusFailed)
default:
return
}
return
}
// UpdateFakeWayBillToTiktok 轮询更新假订单到抖音 // UpdateFakeWayBillToTiktok 轮询更新假订单到抖音
func UpdateFakeWayBillToTiktok() { func UpdateFakeWayBillToTiktok() {
scheduleTimer, _ := rand.Int(rand.Reader, big.NewInt(1000)) scheduleTimer, _ := rand.Int(rand.Reader, big.NewInt(1000))
@@ -252,48 +298,7 @@ func UpdateFakeWayBillToTiktok() {
LogisticsStatus: fakeWayBill[i].Status, LogisticsStatus: fakeWayBill[i].Status,
} }
switch fakeWayBill[i].Status { makeRiderInfo(fakeWayBill[i], riderInfo)
case 5: // 呼叫骑手
riderInfo.LogisticsContext = "呼叫骑手,新建运单"
riderInfo.LogisticsStatus = 0
riderInfo.CourierName = ""
riderInfo.CourierPhone = ""
riderInfo.OpCode = tiktok_api.TiktokLogisticsStatusCALLRIDER
// 下一状态以及推送时间
fakeWayBill[i].Status = model.WaybillStatusCourierAssigned
fakeWayBill[i].VendorStatus = utils.Int64ToStr(model.WaybillStatusCourierAssigned)
case 12: // 骑手接单
riderInfo.LogisticsContext = model.RiderWaitGetGoods
riderInfo.LogisticsStatus = 12
riderInfo.OpCode = tiktok_api.TiktokLogisticsORDERRECEIVED
// 下一状态以及推送时间
fakeWayBill[i].Status = model.WaybillStatusCourierArrived
fakeWayBill[i].VendorStatus = utils.Int64ToStr(model.WaybillStatusCourierArrived)
case 15: // 到店
riderInfo.LogisticsContext = model.RiderToStore
riderInfo.LogisticsStatus = 15
riderInfo.OpCode = tiktok_api.TiktokLogisticsRIDERARRIVED
// 下一状态以及推送时间
fakeWayBill[i].Status = model.WaybillStatusDelivering
fakeWayBill[i].VendorStatus = utils.Int64ToStr(model.WaybillStatusDelivering)
case 20: //配送中
riderInfo.LogisticsContext = model.RiderGetOrderDelivering
riderInfo.LogisticsStatus = 20
riderInfo.OpCode = tiktok_api.TiktokLogisticsRIDERPICKUP
// 下一状态以及推送时间
fakeWayBill[i].Status = model.WaybillStatusDelivered
fakeWayBill[i].VendorStatus = utils.Int64ToStr(model.WaybillStatusDelivered)
case 105: // 完成
riderInfo.LogisticsContext = model.RiderGetOrderDelivered
riderInfo.LogisticsStatus = 40
riderInfo.OpCode = tiktok_api.TiktokLogisticsDELIVERED
// 下一状态以及推送时间
fakeWayBill[i].Status = model.WaybillStatusFailed
fakeWayBill[i].VendorStatus = utils.Int64ToStr(model.WaybillStatusFailed)
default:
continue
}
if riderInfo.LogisticsContext != model.RiderGetOrderDeliverFailed && riderInfo.LogisticsContext != model.RiderGetOrderDeliverOther && riderInfo.LogisticsContext != model.RiderWaitRider { if riderInfo.LogisticsContext != model.RiderGetOrderDeliverFailed && riderInfo.LogisticsContext != model.RiderGetOrderDeliverOther && riderInfo.LogisticsContext != model.RiderWaitRider {
riderInfo.LogisticsContext = fmt.Sprintf(riderInfo.LogisticsContext, riderInfo.CourierName, riderInfo.CourierPhone) riderInfo.LogisticsContext = fmt.Sprintf(riderInfo.LogisticsContext, riderInfo.CourierName, riderInfo.CourierPhone)
@@ -301,7 +306,8 @@ func UpdateFakeWayBillToTiktok() {
// 推送骑手信息 // 推送骑手信息
paramsMap := utils.Struct2Map(riderInfo, "", true) paramsMap := utils.Struct2Map(riderInfo, "", true)
if handler := partner.GetPurchaseOrderHandlerFromVendorID(model.VendorIDDD); handler != nil { handler := partner.GetPurchaseOrderHandlerFromVendorID(fakeWayBill[i].OrderVendorID)
if handler != nil {
if err := handler.GetOrderRider(fakeWayBill[i].VendorOrgCode, "", paramsMap); err != nil { if err := handler.GetOrderRider(fakeWayBill[i].VendorOrgCode, "", paramsMap); err != nil {
globals.SugarLogger.Errorf("Fake Pull Rider Info Err :%s--%s--%v", riderInfo.OrderId, riderInfo.ThirdCarrierOrderId, err) globals.SugarLogger.Errorf("Fake Pull Rider Info Err :%s--%s--%v", riderInfo.OrderId, riderInfo.ThirdCarrierOrderId, err)
continue continue
@@ -321,11 +327,27 @@ func UpdateFakeWayBillToTiktok() {
} }
// 更新运单为完成状态 // 更新运单为完成状态
if fakeWayBill[i].Status == model.WaybillStatusDelivered { if fakeWayBill[i].Status == model.WaybillStatusDelivered {
order, err := partner.CurOrderManager.LoadOrder(fakeWayBill[i].VendorOrderID, fakeWayBill[i].OrderVendorID)
if err != nil {
globals.SugarLogger.Errorf("Loading order by wayBill vendorOrderID err := %v", err)
continue
}
if order.Status == model.OrderStatusCanceled {
continue
}
sql := `UPDATE goods_order g SET g.status = ?,g.vendor_status = ?,g.order_finished_at = ? WHERE g.vendor_order_id = ? ` sql := `UPDATE goods_order g SET g.status = ?,g.vendor_status = ?,g.order_finished_at = ? WHERE g.vendor_order_id = ? `
_, err := dao.ExecuteSQL(dao.GetDB(), sql, []interface{}{model.OrderStatusFinished, model.OrderStatusFinished, time.Now(), fakeWayBill[i].VendorOrderID}...) _, err = dao.ExecuteSQL(dao.GetDB(), sql, []interface{}{model.OrderStatusFinished, model.OrderStatusFinished, time.Now(), fakeWayBill[i].VendorOrderID}...)
if err != nil { if err != nil {
globals.SugarLogger.Debugf("UPDATA goods_order Err :%s", err.Error()) globals.SugarLogger.Debugf("UPDATA goods_order Err :%s", err.Error())
} }
// 饿百订单推送订单送达
if fakeWayBill[i].OrderVendorID == model.VendorIDEBAI {
if err := handler.Swtich2SelfDelivered(order, "JingXiAdmin"); err != nil {
globals.SugarLogger.Errorf("Swtich2SelfDelivered err := %v", err)
}
}
} }
} }

View File

@@ -158,5 +158,36 @@ func (p *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCat
} }
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) { func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
return nil selfStatus := 0
switch param["logistics_status"].(int) {
case 0:
selfStatus = 2 // 2:配送待分配
case 12:
selfStatus = 3 // 骑士接单
case 15:
selfStatus = 8 // 骑士到店
case 20:
selfStatus = 20 // 骑手送出
case 40:
selfStatus = 30 // 配送完成
default:
selfStatus = 7 // 配送异常
}
param2 := &ebaiapi.PushRiderInfo{
DistributorId: 201,
OrderId: param["order_id"].(string),
State: 21,
SelfStatus: selfStatus,
SelfStatusDesc: param["logistics_context"].(string),
DistributorInfoDTO: ebaiapi.DistributorInfoDTO{
DistributorTypeId: "99999",
DistributorName: "商家自行配送",
},
Knight: ebaiapi.Knight{
Id: utils.Str2Int64(param["order_id"].(string)),
Name: param["courier_name"].(string),
Phone: param["courier_phone"].(string),
},
}
return api.EbaiAPI.OrderselfDeliveryStateSync2(param2)
} }

View File

@@ -522,6 +522,9 @@ func (c *PurchaseHandler) onOrderNew(msg *ebaiapi.CallbackMsg, orderStatus *mode
}) })
} }
} }
if handler := partner.GetPurchaseOrderHandlerFromVendorID(model.VendorIDEBAI); handler != nil {
handler.AcceptOrRefuseOrder(order, true, "jxAdmin")
}
return api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, map[string]interface{}{ return api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, map[string]interface{}{
"source_order_id": vendorOrderID, "source_order_id": vendorOrderID,
}) })

View File

@@ -270,7 +270,6 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
if err == nil { if err == nil {
if shopID > 0 { if shopID > 0 {
err = p.UpdateStoreCustomID(jxcontext.AdminCtx, "", store.VendorStoreID, int64(shopID)) err = p.UpdateStoreCustomID(jxcontext.AdminCtx, "", store.VendorStoreID, int64(shopID))
globals.SugarLogger.Debugf("UpdateStore store.VendorStoreID====%s,shopID====%s", store.VendorStoreID, shopID)
} else if shopID == 0 { } else if shopID == 0 {
// todo remove out shop id // todo remove out shop id
} }
@@ -346,7 +345,6 @@ func (p *PurchaseHandler) RefreshAllStoresID(ctx *jxcontext.Context, parentTask
fBaiduIDs, fShopIDs, err1 := FilterStoreRel(baiduShopIDs) fBaiduIDs, fShopIDs, err1 := FilterStoreRel(baiduShopIDs)
globals.SugarLogger.Debugf("RefreshAllStoresID FilterStoreRel fBaiduIDs====%d fShopIDs====%d err====%v", fBaiduIDs, fShopIDs, err1) globals.SugarLogger.Debugf("RefreshAllStoresID FilterStoreRel fBaiduIDs====%d fShopIDs====%d err====%v", fBaiduIDs, fShopIDs, err1)
err = api.EbaiAPI.ShopIDBatchUpdate(fBaiduIDs, fShopIDs) err = api.EbaiAPI.ShopIDBatchUpdate(fBaiduIDs, fShopIDs)
globals.SugarLogger.Debugf("RefreshAllStoresID baiduShopIDs====%s,shopIDs====%s", baiduShopIDs, shopIDs)
} }
return nil, err return nil, err
}, stores) }, stores)
@@ -373,7 +371,6 @@ func FilterStoreRel(baiduShopIDs []string) (fBaiduShopIDs []string, fShopIDs []s
return nil, nil, err return nil, nil, err
} }
localRel, err := dao.GetStoreDetailByVendorStoreID(dao.GetDB(), k, model.VendorIDEBAI, "") localRel, err := dao.GetStoreDetailByVendorStoreID(dao.GetDB(), k, model.VendorIDEBAI, "")
globals.SugarLogger.Debugf("get localRel err===%v", err)
if remoteRel.ShopID != utils.Int2Str(localRel.ID) { if remoteRel.ShopID != utils.Int2Str(localRel.ID) {
fBaiduShopIDs = append(fBaiduShopIDs, k) fBaiduShopIDs = append(fBaiduShopIDs, k)
fShopIDs = append(fShopIDs, utils.Int2Str(localRel.ID)) fShopIDs = append(fShopIDs, utils.Int2Str(localRel.ID))
@@ -673,7 +670,6 @@ func (c *PurchaseHandler) UpdateStoreCustomID(ctx *jxcontext.Context, vendorOrgC
if err1 != nil { if err1 != nil {
globals.SugarLogger.Debugf("UpdateStoreCustomID err1====%v", err1) globals.SugarLogger.Debugf("UpdateStoreCustomID err1====%v", err1)
} }
globals.SugarLogger.Debugf("UpdateStoreCustomID fBaiduIDs====%s fShopIDs====%d err1", fBaiduIDs, fShopIDs)
err = api.EbaiAPI.ShopIDBatchUpdate(fBaiduIDs, fShopIDs) err = api.EbaiAPI.ShopIDBatchUpdate(fBaiduIDs, fShopIDs)
//err = api.EbaiAPI.ShopIDBatchUpdate([]string{vendorStoreID}, []string{utils.Int64ToStr(storeID)}) //err = api.EbaiAPI.ShopIDBatchUpdate([]string{vendorStoreID}, []string{utils.Int64ToStr(storeID)})
} }

View File

@@ -515,6 +515,9 @@ func genSkuParamsFromStoreSkuInfo2(storeSku *dao.StoreSkuSyncInfo, isCreate, isE
if storeSku.MinOrderCount > 0 { if storeSku.MinOrderCount > 0 {
params["minimum"] = utils.Int2Float64(storeSku.MinOrderCount) params["minimum"] = utils.Int2Float64(storeSku.MinOrderCount)
} }
if storeSku.MinOrderCount == 0 {
params["minimum"] = utils.Int2Float64(1)
}
return params return params
} }

View File

@@ -108,10 +108,6 @@ func (p *PurchaseHandler) DeleteCategory2(ctx *jxcontext.Context, vendorOrgCode,
func (p *PurchaseHandler) ReorderCategories2(ctx *jxcontext.Context, vendorOrgCode, vendorParentCatID string, vendorCatIDList []string) (err error) { func (p *PurchaseHandler) ReorderCategories2(ctx *jxcontext.Context, vendorOrgCode, vendorParentCatID string, vendorCatIDList []string) (err error) {
if globals.EnableJdStoreWrite { if globals.EnableJdStoreWrite {
err = getAPI(vendorOrgCode).ChangeShopCategoryOrder(utils.Str2Int64WithDefault(vendorParentCatID, 0), utils.StringSlice2Int64(vendorCatIDList)) err = getAPI(vendorOrgCode).ChangeShopCategoryOrder(utils.Str2Int64WithDefault(vendorParentCatID, 0), utils.StringSlice2Int64(vendorCatIDList))
globals.SugarLogger.Debugf("vendorInfo.vendorOrgCode=== %s", vendorOrgCode)
globals.SugarLogger.Debugf("vendorInfo.vendorParentCatID=== %s", vendorParentCatID)
globals.SugarLogger.Debugf("vendorInfo.vendorCatIDList=== %s", vendorCatIDList)
globals.SugarLogger.Debugf("ReorderCategories2 === %v", err)
} }
return err return err
} }

View File

@@ -297,7 +297,6 @@ func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, v
} }
func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) { func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
globals.SugarLogger.Debugf("是不是正儿八经的京东商城%s", "UpdateStoreSkus")
if globals.EnableJdShopWrite && vendorStoreID == model.JdShopMainVendorStoreID { if globals.EnableJdShopWrite && vendorStoreID == model.JdShopMainVendorStoreID {
if vendorStoreID == model.JdShopMainVendorStoreID { if vendorStoreID == model.JdShopMainVendorStoreID {
for _, v := range storeSkuList { for _, v := range storeSkuList {

View File

@@ -0,0 +1,191 @@
package localjx
import (
"errors"
"fmt"
"git.rosy.net.cn/baseapi/platformapi/kuaishou_mini"
"strings"
"time"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/kuaishou"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/globals/api"
)
func getOrderBriefKs(order *model.GoodsOrder) string {
sku := make([]string, len(order.Skus))
for _, v := range order.Skus {
sku = append(sku, fmt.Sprintf("%s x %d件商品", v.SkuName, v.Count))
}
return strings.Join(sku, ",")
}
func pay4OrderByKs(ctx *jxcontext.Context, order *model.GoodsOrder, vendorPayType, subAppID string) (orderPay *model.OrderPay, err error) {
// 获取用户快手OpenId
var (
db = dao.GetDB()
)
authBindList, err := dao.GetUserBindAuthInfo(db, ctx.GetUserID(), model.AuthBindTypeAuth, []string{kuaishou.AuthTypeKuaiShouMini}, "", "", nil)
if err != nil {
return nil, err
}
if len(authBindList) == model.NO {
return nil, errors.New("用户未绑定快手,无法快手支付")
}
param := &kuaishou_mini.PreCreateOrderReq{
OutOrderNo: utils.Int64ToStr(GenPayOrderID(order)),
OpenId: authBindList[0].AuthID,
TotalAmount: order.ActualPayPrice,
Subject: "蔬菜水果日用品",
Detail: getOrderBriefKs(order),
TypeDetail: 1832, // 蔬菜:费率2%,水果:1833%2
ExpireTime: 60 * 10,
Sign: "",
Attach: "",
NotifyUrl: "http://callback.jxc4.com/kuaishou/KuaiShouCallback",
GoodsId: "",
GoodsDetailUrl: "",
MultiCopiesGoodsInfo: "",
CancelOrder: 0,
}
// 预下单
prePayInfo, err := api.KuaiShouApi.PreCreateOrder(param)
if err == nil {
orderPay = &model.OrderPay{
PayOrderID: order.VendorOrderID, // 抖音订单id
PayType: model.PayTypeKuaiShou,
VendorPayType: vendorPayType,
VendorOrderID: order.VendorOrderID,
VendorID: order.VendorID,
Status: 0,
PayCreatedAt: time.Now(),
PrepayID: "",
CodeURL: prePayInfo, // 抖音支付token
TotalFee: int(order.ActualPayPrice),
}
}
return orderPay, err
}
func OnKSPayCallback(msg *kuaishou_mini.CallBackDetail, refund *kuaishou_mini.RefundCallBack, payType string) (err error) {
switch payType {
case kuaishou_mini.CallbackTypePay: // 支付回调
err = onKSPayFinished(msg)
case kuaishou_mini.CallbackTypeRefund: // 退款回调
err = onKSPayRefund(refund)
}
return err
}
func onKSPayFinished(msg *kuaishou_mini.CallBackDetail) (err error) {
orderPay := &model.OrderPay{
PayOrderID: msg.OutOrderNo,
PayType: model.PayTypeTicTok,
}
orderPay.DeletedAt = utils.DefaultTimeValue
db := dao.GetDB()
if err = dao.GetEntity(db, orderPay, "PayOrderID", "PayType", "DeletedAt"); err == nil {
orderPay.PayFinishedAt = utils.Time2Pointer(time.Now())
orderPay.TransactionID = msg.TradeNo
orderPay.OriginalData = utils.Format4Output(msg, true)
switch msg.Status {
case kuaishou_mini.OrderPayStatusHandleing:
orderPay.Status = model.PayStatusNo
case kuaishou_mini.OrderPayStatusSuccess:
orderPay.Status = model.PayStatusYes
case kuaishou_mini.OrderPayStatusFailed:
orderPay.Status = model.PayStatusFailed
}
dao.UpdateEntity(db, orderPay)
if msg.Status == kuaishou_mini.OrderPayStatusSuccess {
err = OnPayFinished(orderPay)
}
} else {
globals.SugarLogger.Debugf("onKSPayFinished msg:%s, err:%v", utils.Format4Output(msg, true), err)
}
return err
}
func onKSPayRefund(msg *kuaishou_mini.RefundCallBack) (err error) {
orderPayRefund := &model.OrderPayRefund{
RefundID: msg.OutRefundNo,
}
db := dao.GetDB()
if err = dao.GetEntity(db, orderPayRefund, "RefundID"); err == nil {
switch msg.Status {
case kuaishou_mini.OrderPayStatusHandleing:
orderPayRefund.Status = model.PayStatusNo
case kuaishou_mini.OrderPayStatusSuccess:
orderPayRefund.Status = model.PayStatusYes
case kuaishou_mini.OrderPayStatusFailed:
orderPayRefund.Status = model.PayStatusFailed
}
orderPayRefund.OriginalData = utils.Format4Output(msg, true)
dao.UpdateEntity(db, orderPayRefund)
} else if dao.IsNoRowsError(err) {
globals.SugarLogger.Warnf("收到异常的退款事件, msg:%s", utils.Format4Output(msg, true))
}
orderPay := &model.OrderPay{
VendorOrderID: orderPayRefund.VendorOrderID,
VendorID: jxutils.GetPossibleVendorIDFromVendorOrderID(orderPayRefund.VendorOrderID),
PayType: model.PayTypeKuaiShou,
Status: model.PayStatusYes,
}
orderPay.DeletedAt = utils.DefaultTimeValue
if err = dao.GetEntity(db, orderPay, "VendorOrderID", "VendorID", "PayType", "Status", "DeletedAt"); err == nil {
orderPay.Status = model.PayStatusRefund
dao.UpdateEntity(db, orderPay)
}
return err
}
// RefundOrderByKS 申请退款
func RefundOrderByKS(ctx *jxcontext.Context, orderPay *model.OrderPay, refundID string, refundFee int, refundDesc string) (orderPayRefund *model.OrderPayRefund, err error) {
param := kuaishou_mini.RefundParam{
OutOrderNo: orderPay.VendorOrderID,
OutRefundNo: refundID,
Reason: refundDesc,
Attach: "",
NotifyUrl: "http://callback.jxc4.com/kuaishou/kuaiShouCallback",
RefundAmount: int64(orderPay.TotalFee),
Sign: "",
MultiCopiesGoodsInfo: "",
}
result, err := api.KuaiShouApi.RefundOrder(&param)
if err == nil {
orderPayRefund = &model.OrderPayRefund{
RefundID: refundID,
VendorRefundID: result,
VendorOrderID: orderPay.VendorOrderID,
VendorID: orderPay.VendorID,
Status: model.RefundStatusNo,
TransactionID: orderPay.TransactionID,
RefundFee: refundFee,
RefundCreatedAt: time.Now(),
}
dao.WrapAddIDCULDEntity(orderPayRefund, ctx.GetUserName())
db := dao.GetDB()
if result != "" {
orderPayRefund.Status = model.RefundStatusYes
} else {
orderPayRefund.Status = model.RefundStatusFailed
}
orderPayRefund.OriginalData = utils.Format4Output(result, true)
dao.CreateEntity(db, orderPayRefund)
orderPay.Status = model.PayStatusRefund
dao.UpdateEntity(db, orderPay)
}
return orderPayRefund, err
}

View File

@@ -3,7 +3,6 @@ package localjx
import ( import (
"errors" "errors"
"fmt" "fmt"
"git.rosy.net.cn/jx-callback/globals"
"math" "math"
"regexp" "regexp"
"strings" "strings"
@@ -252,7 +251,6 @@ func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64,
outJxOrder.OrderID = jxutils.GenOrderNo() outJxOrder.OrderID = jxutils.GenOrderNo()
} }
order, err2 := jxOrder2GoodsOrder(ctx, outJxOrder, deliveryAddress, "", IsDeliverySelf, couponIDs) order, err2 := jxOrder2GoodsOrder(ctx, outJxOrder, deliveryAddress, "", IsDeliverySelf, couponIDs)
globals.SugarLogger.Debugf("order order %s", utils.Format4Output(order, false))
if err = err2; err == nil { if err = err2; err == nil {
order.AddressID = addressID order.AddressID = addressID
@@ -315,7 +313,6 @@ func Pay4Order(ctx *jxcontext.Context, orderID int64, payType int, vendorPayType
db = dao.GetDB() db = dao.GetDB()
) )
order, err := partner.CurOrderManager.LoadOrder(utils.Int64ToStr(orderID), model.VendorIDJX) order, err := partner.CurOrderManager.LoadOrder(utils.Int64ToStr(orderID), model.VendorIDJX)
globals.SugarLogger.Debugf("goodsorder := %s", utils.Format4Output(order, false))
if err == nil { if err == nil {
switch payType { switch payType {
case model.PayTypeWX: case model.PayTypeWX:
@@ -336,6 +333,11 @@ func Pay4Order(ctx *jxcontext.Context, orderID int64, payType int, vendorPayType
dao.WrapAddIDCULDEntity(orderPay, ctx.GetUserName()) dao.WrapAddIDCULDEntity(orderPay, ctx.GetUserName())
err = dao.CreateEntity(dao.GetDB(), orderPay) err = dao.CreateEntity(dao.GetDB(), orderPay)
} }
case model.PayTypeKuaiShou:
if orderPay, err = pay4OrderByKs(ctx, order, vendorPayType, subAppID); err == nil && orderPay != nil {
dao.WrapAddIDCULDEntity(orderPay, ctx.GetUserName())
err = dao.CreateEntity(dao.GetDB(), orderPay)
}
default: default:
err = fmt.Errorf("支付方式:%d当前不支持", payType) err = fmt.Errorf("支付方式:%d当前不支持", payType)
} }
@@ -839,7 +841,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
if jxOrder.OrderType != model.OrderTypeMatter || (jxOrder.OrderType == model.OrderTypeMatter && fromStoreID == -1) { if jxOrder.OrderType != model.OrderTypeMatter || (jxOrder.OrderType == model.OrderTypeMatter && fromStoreID == -1) {
outJxOrder.Skus = append(outJxOrder.Skus, jxSku) outJxOrder.Skus = append(outJxOrder.Skus, jxSku)
outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice
} else { //以下else为物料订单袋子金额和数量处理 } else { //以下else为物料订单袋子金额和数量处理
if !result.Flag { //只要flag是false就按原价申请是true再按订单量 if !result.Flag { //只要flag是false就按原价申请是true再按订单量
outJxOrder.Skus = append(outJxOrder.Skus, jxSku) outJxOrder.Skus = append(outJxOrder.Skus, jxSku)
outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice
@@ -1028,6 +1030,11 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
if storeDetail.ID == 668470 || storeDetail.ID == 668469 { if storeDetail.ID == 668470 || storeDetail.ID == 668469 {
outJxOrder.FreightPrice = 1 outJxOrder.FreightPrice = 1
} }
if IsDeliverySelf {
outJxOrder.FreightPrice = 0
}
if err == nil { if err == nil {
if jxOrder.OrderType == model.OrderTypeNormal { if jxOrder.OrderType == model.OrderTypeNormal {
outJxOrder.TotalPrice = outJxOrder.OrderPrice + outJxOrder.FreightPrice outJxOrder.TotalPrice = outJxOrder.OrderPrice + outJxOrder.FreightPrice
@@ -1394,7 +1401,8 @@ func CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string)
// refundID := utils.Int64ToStr(GenRefundID(order)) // refundID := utils.Int64ToStr(GenRefundID(order))
refundID := order.VendorOrderID refundID := order.VendorOrderID
var orderPayRefund *model.OrderPayRefund var orderPayRefund *model.OrderPayRefund
if orderPay.PayType == model.PayTypeWX { switch orderPay.PayType {
case model.PayTypeWX:
orderPayRefund, err = refundOrderByWX(ctx, orderPay, refundID, orderPay.TotalFee, reason) orderPayRefund, err = refundOrderByWX(ctx, orderPay, refundID, orderPay.TotalFee, reason)
if err == nil { if err == nil {
dao.WrapAddIDCULDEntity(orderPayRefund, ctx.GetUserName()) dao.WrapAddIDCULDEntity(orderPayRefund, ctx.GetUserName())
@@ -1402,17 +1410,23 @@ func CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string)
} else { } else {
errList.AddErr(err) errList.AddErr(err)
} }
} else if orderPay.PayType == model.PayTypeTL { case model.PayTypeTL:
orderPayRefund, err = RefundOrderByTL(ctx, orderPay, refundID, orderPay.TotalFee, reason) orderPayRefund, err = RefundOrderByTL(ctx, orderPay, refundID, orderPay.TotalFee, reason)
if err != nil { if err != nil {
errList.AddErr(err) errList.AddErr(err)
} }
} else if orderPay.PayType == model.PayTypeTicTok { case model.PayTypeTicTok:
orderPayRefund, err = RefundOrderByTT(ctx, orderPay, refundID, orderPay.TotalFee, reason) orderPayRefund, err = RefundOrderByTT(ctx, orderPay, refundID, orderPay.TotalFee, reason)
if err != nil { if err != nil {
errList.AddErr(err) errList.AddErr(err)
} }
case model.PayTypeKuaiShou:
orderPayRefund, err = RefundOrderByKS(ctx, orderPay, refundID, orderPay.TotalFee, reason)
if err != nil {
errList.AddErr(err)
}
} }
if err == nil { if err == nil {
//如果用了优惠券,状态要刷回去 //如果用了优惠券,状态要刷回去
if order.CouponIDs != "" { if order.CouponIDs != "" {

View File

@@ -58,6 +58,7 @@ func getTikTok(appID string) (TikTokMini *tiktok.API) {
} }
return TikTokMini return TikTokMini
} }
func OnTTPayCallback(msg *tiktok.DetailCallBackMessage, refund *tiktok.DetailCallBackMessage2Refund, payType string) (err error) { func OnTTPayCallback(msg *tiktok.DetailCallBackMessage, refund *tiktok.DetailCallBackMessage2Refund, payType string) (err error) {
switch payType { switch payType {
case tiktok.PayStatus: // 支付回调 case tiktok.PayStatus: // 支付回调

View File

@@ -47,6 +47,9 @@ func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *mod
if orderPays[0].PayType == model.PayTypeTicTok { if orderPays[0].PayType == model.PayTypeTicTok {
_, err = localjx.RefundOrderByTT(ctx, orderPays[0], order.VendorOrderID, int(order.SkuUserMoney), reason) _, err = localjx.RefundOrderByTT(ctx, orderPays[0], order.VendorOrderID, int(order.SkuUserMoney), reason)
} }
if orderPays[0].PayType == model.PayTypeKuaiShou {
_, err = localjx.RefundOrderByKS(ctx, orderPays[0], order.VendorOrderID, int(order.SkuUserMoney), reason)
}
if err != nil { if err != nil {
return err return err
} else { } else {
@@ -177,5 +180,11 @@ func isJxShop(appID string) bool {
} }
func (c *PurchaseHandler) GetOrderAfsInfo(ctx *jxcontext.Context, vendorOrderID, afsOrderID string) (orderAfsInfo *partner.OrderAfsInfo, err error) { func (c *PurchaseHandler) GetOrderAfsInfo(ctx *jxcontext.Context, vendorOrderID, afsOrderID string) (orderAfsInfo *partner.OrderAfsInfo, err error) {
orderAfsInfo = &partner.OrderAfsInfo{}
if order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, model.VendorIDJX); err == nil {
orderAfsInfo.AfsTotalShopMoney = order.TotalShopMoney
}
orderAfsInfo.VendorOrderID = vendorOrderID
return orderAfsInfo, err return orderAfsInfo, err
} }

View File

@@ -1,11 +1,14 @@
package phpjx package phpjx
import ( import (
"errors"
"fmt"
"git.rosy.net.cn/jx-callback/business/model/dao"
"strings"
"time" "time"
"git.rosy.net.cn/baseapi/platformapi/jdapi" "git.rosy.net.cn/baseapi/platformapi/jdapi"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/business/partner"
) )
@@ -33,15 +36,58 @@ type Data4AfsOrder struct {
} }
func OnAfsOrderMsg(msg *CallbackMsg) (err error) { func OnAfsOrderMsg(msg *CallbackMsg) (err error) {
jxutils.CallMsgHandlerAsync(func() { //jxutils.CallMsgHandlerAsync(func() {
err = onAfsOrderMsg(msg) err = onAfsOrderMsg(msg)
}, jxutils.ComposeUniversalOrderID(msg.ThingID, model.VendorIDJX)) //}, jxutils.ComposeUniversalOrderID(msg.ThingID, model.VendorIDJX))
return err return err
} }
func CheckOrderSkuCanRefund(db *dao.DaoDB, afsOrder *Data4AfsOrder) error {
// 获取此订单商品吃否存在售后单
refundFinancial, err := dao.GetOrderRefundSkuList(db, []string{afsOrder.VendorOrderID})
if err != nil && !strings.Contains(err.Error(), "no row found") {
return nil
}
if len(refundFinancial) == model.NO {
return nil
}
for _, r := range refundFinancial {
for _, s := range afsOrder.Skus {
if r.SkuID == utils.Str2Int(s.VendorSkuID) {
return fmt.Errorf("商品:[%s],已经存在售后单无法重复申请", s.Name)
}
}
}
// 获取用户下单商品列表
skuList, err := dao.GetSimpleOrderSkus(dao.GetDB(), afsOrder.VendorOrderID, nil)
if err != nil {
return err
}
var really = make(map[int]bool, 0)
for _, s := range skuList {
really[s.SkuID] = true
}
for _, v := range afsOrder.Skus {
if _, ok := really[utils.Str2Int(v.VendorSkuID)]; !ok {
return fmt.Errorf("商品:[%s],不是购买商品", v.Name)
}
}
return nil
}
func buildAfsOrder(msg *CallbackMsg) (outAfsOrder *model.AfsOrder, err error) { func buildAfsOrder(msg *CallbackMsg) (outAfsOrder *model.AfsOrder, err error) {
var afsOrder *Data4AfsOrder var afsOrder *Data4AfsOrder
var db = dao.GetDB()
if err = utils.UnmarshalUseNumber([]byte(msg.Data), &afsOrder); err == nil { if err = utils.UnmarshalUseNumber([]byte(msg.Data), &afsOrder); err == nil {
if err := CheckOrderSkuCanRefund(db, afsOrder); err != nil {
return nil, err
}
outAfsOrder = &model.AfsOrder{ outAfsOrder = &model.AfsOrder{
VendorID: model.VendorIDJX, VendorID: model.VendorIDJX,
AfsOrderID: afsOrder.AfsOrderID, AfsOrderID: afsOrder.AfsOrderID,
@@ -61,17 +107,72 @@ func buildAfsOrder(msg *CallbackMsg) (outAfsOrder *model.AfsOrder, err error) {
} }
outAfsOrder.Status = int(utils.Str2Int64WithDefault(afsOrder.VendorStatus, 0)) outAfsOrder.Status = int(utils.Str2Int64WithDefault(afsOrder.VendorStatus, 0))
skuNumber := 0 // 申请退款商品种类个数
skuCount := 0 // 申请商品退款总条数
refundMoney := 0
// 当前申请退款的商品
for _, x := range afsOrder.Skus { for _, x := range afsOrder.Skus {
orderSku := &model.OrderSkuFinancial{ orderSku := &model.OrderSkuFinancial{
Count: x.Count, Count: x.Count,
VendorSkuID: x.VendorSkuID, VendorSkuID: x.VendorSkuID,
SkuID: int(utils.Str2Int64WithDefault(x.VendorSkuID, 0)), SkuID: int(utils.Str2Int64WithDefault(x.VendorSkuID, 0)),
Name: x.Name, Name: x.Name,
UserMoney: x.SalePrice * int64(x.Count),
} }
if x.PromotionType != 0 && x.PromotionType != jdapi.PromotionTypeNormal { if x.PromotionType != 0 && x.PromotionType != jdapi.PromotionTypeNormal {
orderSku.StoreSubName = utils.Int2Str(x.PromotionType) orderSku.StoreSubName = utils.Int2Str(x.PromotionType)
} }
outAfsOrder.Skus = append(outAfsOrder.Skus, orderSku) outAfsOrder.Skus = append(outAfsOrder.Skus, orderSku)
skuCount += orderSku.Count
skuNumber++
refundMoney += x.Count * int(x.SalePrice)
}
// 已经退款商品
refundFinancial, err := dao.GetStoreAfsOrderSkuList2(db, []string{afsOrder.VendorOrderID})
if err != nil && !dao.IsNoRowsError(err) {
return nil, err
}
for _, f := range refundFinancial {
skuCount += f.Count
skuNumber++
refundMoney += f.Count * int(f.SalePrice)
}
// 获取订单商品列表(所有的订单商品)
skuList, err := dao.GetSimpleOrderSkus(dao.GetDB(), afsOrder.VendorOrderID, nil)
if err != nil {
return nil, err
}
makeOrderSkuCount := 0
afsOrderOrderSkuCount := 0
refundFinacialSkuCount := 0
for _, v := range skuList {
makeOrderSkuCount += v.Count
}
for _, v := range afsOrder.Skus {
afsOrderOrderSkuCount += v.Count
}
for _, v := range refundFinancial {
refundFinacialSkuCount += v.Count
}
// 这么写主要是不想让满足条件一的进入条件三
if makeOrderSkuCount == afsOrderOrderSkuCount && refundFinacialSkuCount == model.NO { // 整单退
} else if makeOrderSkuCount-refundFinacialSkuCount == model.YES && makeOrderSkuCount == model.YES { // 整单退且只有一个商品
} else if makeOrderSkuCount-refundFinacialSkuCount-afsOrderOrderSkuCount == model.NO && afsOrderOrderSkuCount > 0 { // 分单退最后一个,不给退
return nil, errors.New("如需整单退款,请使用整单退,无法分批次整单退款")
}
orderSkuNumber := 0
orderSkuCount := 0
for _, v := range skuList {
orderSkuNumber++
orderSkuCount += v.Count
}
if skuNumber == orderSkuNumber && skuCount == orderSkuCount {
outAfsOrder.RefundType = model.AfsTypeFullRefund
} else { // 部分退款,只退还商品部分
outAfsOrder.RefundType = model.AfsTypePartRefund
} }
} }
return outAfsOrder, err return outAfsOrder, err
@@ -86,7 +187,7 @@ func callbackAfsMsg2Status(msg *CallbackMsg) *model.OrderStatus {
RefVendorID: model.VendorIDJX, RefVendorID: model.VendorIDJX,
VendorStatus: msg.SubMsgType, VendorStatus: msg.SubMsgType,
Status: int(utils.Str2Int64WithDefault(msg.SubMsgType, 0)), Status: int(utils.Str2Int64WithDefault(msg.SubMsgType, 0)),
StatusTime: utils.Timestamp2Time(msg.Timestamp), StatusTime: time.Now(),
Remark: "", Remark: "",
} }
return orderStatus return orderStatus

View File

@@ -339,6 +339,7 @@ func (c *PurchaseHandler) onOrderMsg(msg *mtwmapi.CallbackMsg) (response *mtwmap
var err error var err error
if c.isAfsMsg(msg) { if c.isAfsMsg(msg) {
response = c.OnAfsOrderMsg(msg) response = c.OnAfsOrderMsg(msg)
return response
} else { } else {
status := c.callbackMsg2Status(msg) status := c.callbackMsg2Status(msg)
if partner.CurOrderManager.GetStatusDuplicatedCount(status) > 0 { if partner.CurOrderManager.GetStatusDuplicatedCount(status) > 0 {

View File

@@ -145,7 +145,15 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwma
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus) err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
} }
} else { } else {
err = partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus) if err := partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus); err == nil {
// 订单回调全额退款接口时,将订单状态修改为取消
refundData := msg.Data.(*mtwmapi.CallbackRefundInfo)
if refundData.NotifyType == "agree" && msg.Cmd == mtwmapi.MsgTypeOrderRefund {
order, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, model.VendorIDMTWM)
order.Status = model.OrderStatusCanceled
dao.UpdateEntity(dao.GetDB(), order, "Status")
}
}
} }
return mtwmapi.Err2CallbackResponse(err, "") return mtwmapi.Err2CallbackResponse(err, "")
} }

View File

@@ -323,7 +323,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
foodData["min_order_count"] = 1 foodData["min_order_count"] = 1
} }
foodData["unit"] = storeSku.Unit foodData["unit"] = storeSku.Unit
attr := switchAttr(storeSku.VendorVendorCatID) attr := SwitchAttr(storeSku.VendorVendorCatID)
if attr != "" { if attr != "" {
foodData["common_attr_value"] = attr foodData["common_attr_value"] = attr
} }
@@ -452,7 +452,7 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v
return failedList, err return failedList, err
} }
func switchAttr(vendorCatID int64) (attrs string) { func SwitchAttr(vendorCatID int64) (attrs string) {
switch vendorCatID { switch vendorCatID {
case 200002727: case 200002727:
return mtwmapi.MtwmSkuAttr200002727 return mtwmapi.MtwmSkuAttr200002727

View File

@@ -49,11 +49,16 @@ func (c *PurchaseHandler) callbackMsg2Waybill(msg *mtwmapi.CallbackMsg) (retVal
Status: c.GetWaybillStatusFromVendorStatus(vendorStatus), Status: c.GetWaybillStatusFromVendorStatus(vendorStatus),
StatusTime: getTimeFromTimestamp(utils.Str2Int64(msg.FormData.Get("time"))), StatusTime: getTimeFromTimestamp(utils.Str2Int64(msg.FormData.Get("time"))),
Remark: "", Remark: "",
VendorOrgCode: msg.AppID,
VendorOrgCode: msg.AppID,
} }
if retVal.StatusTime == utils.DefaultTimeValue { if retVal.StatusTime == utils.DefaultTimeValue {
retVal.StatusTime = getTimeFromTimestamp(utils.Str2Int64(msg.FormData.Get("timestamp"))) retVal.StatusTime = getTimeFromTimestamp(utils.Str2Int64(msg.FormData.Get("timestamp")))
} }
//if vendorStatus == "4" || vendorStatus == "8" { // 4:美团推送已经(确认骑手)订单 8:美团推送(骑手完成)订单
// retVal.DesiredFee = utils.Float64TwoInt64(utils.Str2Float64WithDefault(msg.FormData.Get("shipping_fee"), 0)) // 订单优惠前的总费用
// partner.CurOrderManager
//}
return retVal return retVal
} }

View File

@@ -28,7 +28,6 @@ const (
func OnOrderMsg(msgId string, msg interface{}) (response *tiktokShop.CallbackResponse) { func OnOrderMsg(msgId string, msg interface{}) (response *tiktokShop.CallbackResponse) {
if CurPurchaseHandler != nil { if CurPurchaseHandler != nil {
orderId, shopId, _ := api.TiktokStore.GetCallbackOrderId(msgId, msg) orderId, shopId, _ := api.TiktokStore.GetCallbackOrderId(msgId, msg)
globals.SugarLogger.Debugf("order_id %s,%d", orderId, shopId)
orderDetail, err := GetTiktokApi(utils.Int64ToStr(shopId), 0, "").GetTiktokOrderDetail(orderId) orderDetail, err := GetTiktokApi(utils.Int64ToStr(shopId), 0, "").GetTiktokOrderDetail(orderId)
if err != nil { if err != nil {
return tiktokShop.Err2CallbackResponse(err, "") return tiktokShop.Err2CallbackResponse(err, "")
@@ -78,7 +77,6 @@ func HttpToGuoYuan(param map[string]interface{}, requestType string) (*http.Resp
} }
} }
body := strings.NewReader(string(paramData)) body := strings.NewReader(string(paramData))
globals.SugarLogger.Debugf("HttpToGuoYuan paramData====%s", utils.Format4Output(paramData, false))
url := "" url := ""
switch requestType { switch requestType {
case CaiShiPushGyTagOrder: // 订单相关 case CaiShiPushGyTagOrder: // 订单相关

View File

@@ -192,7 +192,6 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode, vendorOrderID, vendorStoreID s
// 预订单还是快速达 // 预订单还是快速达
localStore, err := dao.GetStoreDetailByVendorStoreID(dao.GetDB(), vendorStoreIdRelly, model.VendorIDDD, vendorOrgCode) localStore, err := dao.GetStoreDetailByVendorStoreID(dao.GetDB(), vendorStoreIdRelly, model.VendorIDDD, vendorOrgCode)
if err != nil || localStore == nil || localStore.ID == 0 { if err != nil || localStore == nil || localStore.ID == 0 {
globals.SugarLogger.Debugf("平台门店未绑定到京西系统 %s", err.Error())
return nil, nil, err return nil, nil, err
} }

View File

@@ -47,6 +47,7 @@ func (c *PurchaseHandler) OnAfsOrderMsg(msgId, orderId string, msg interface{})
// todo 对于退款与部分退款order.go与这个文件中对于状态的处理不一致 // todo 对于退款与部分退款order.go与这个文件中对于状态的处理不一致
func (c *PurchaseHandler) onAfsOrderMsg(msgId string, msg interface{}) (retVal *tiktokShop.CallbackResponse) { func (c *PurchaseHandler) onAfsOrderMsg(msgId string, msg interface{}) (retVal *tiktokShop.CallbackResponse) {
var err error var err error
var db = dao.GetDB()
orderStatus, vendorOrgCode := c.callbackAfsMsg2Status(msgId, msg) orderStatus, vendorOrgCode := c.callbackAfsMsg2Status(msgId, msg)
if orderStatus == nil { if orderStatus == nil {
return tiktokShop.Err2CallbackResponse(nil, "") return tiktokShop.Err2CallbackResponse(nil, "")
@@ -115,14 +116,20 @@ func (c *PurchaseHandler) onAfsOrderMsg(msgId string, msg interface{}) (retVal *
afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt afsOrder.AfsFinishedAt = afsOrder.AfsCreatedAt
} }
if msgId == tiktokShop.CallbackUpdateRefundOrderMsgTagId { if msgId == tiktokShop.CallbackUpdateRefundOrderMsgTagId {
_, err = dao.DeleteEntity(dao.GetDB(), afsOrder, "VendorOrderID", "VendorID") _, err = dao.DeleteEntity(db, afsOrder, "VendorOrderID", "VendorID")
afsOrder.Skus[0].VendorOrderID = afsOrder.VendorOrderID afsOrder.Skus[0].VendorOrderID = afsOrder.VendorOrderID
_, err = dao.DeleteEntity(dao.GetDB(), afsOrder.Skus[0], "VendorOrderID") _, err = dao.DeleteEntity(db, afsOrder.Skus[0], "VendorOrderID")
} }
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus) err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
} }
} else { } else {
err = partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus) err = partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus)
if err == nil && msgId == tiktokShop.CallbackReturnRefundAgreedMsgTagId {
goodsOrder, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, orderStatus.VendorID)
goodsOrder.Status = model.OrderStatusCanceled
goodsOrder.VendorStatus = orderStatus.VendorStatus
dao.UpdateEntity(db, goodsOrder, "Status", "VendorStatus")
}
} }
return tiktokShop.Err2CallbackResponse(err, "") return tiktokShop.Err2CallbackResponse(err, "")
@@ -186,20 +193,20 @@ func (c *PurchaseHandler) callbackAfsMsg2Status(msgId string, msg interface{}) (
RefVendorOrderID: utils.Int64ToStr(refundOrder.PId), RefVendorOrderID: utils.Int64ToStr(refundOrder.PId),
RefVendorID: model.VendorIDDD, RefVendorID: model.VendorIDDD,
VendorStatus: fmt.Sprintf("%s:%s", "order", "refund_success"), VendorStatus: fmt.Sprintf("%s:%s", "order", "refund_success"),
Status: c.GetAfsStatusFromVendorStatus(refundOrder.AftersaleType, tiktokShop.CallbackUpdateRefundOrderMsgTagId), Status: c.GetAfsStatusFromVendorStatus(int(refundOrder.AftersaleType), tiktokShop.CallbackUpdateRefundOrderMsgTagId),
StatusTime: utils.Timestamp2Time(int64(refundOrder.SuccessTime)), StatusTime: utils.Timestamp2Time(int64(refundOrder.SuccessTime)),
} }
if k, ok := ReasonCodeMap[refundOrder.ReasonCode]; ok { if k, ok := ReasonCodeMap[int(refundOrder.ReasonCode)]; ok {
orderMsg.Remark = k orderMsg.Remark = k
} else { } else {
orderMsg.Remark = "退款成功回调,抖音reason_code对应reason不足,需要更新.code:" + utils.Int2Str(refundOrder.ReasonCode) orderMsg.Remark = "退款成功回调,抖音reason_code对应reason不足,需要更新.code:" + utils.Int64ToStr(refundOrder.ReasonCode)
} }
if refundOrder.AftersaleId > 0 { if refundOrder.AftersaleId > 0 {
orderMsg.VendorOrderID = utils.Int64ToStr(refundOrder.AftersaleId) orderMsg.VendorOrderID = utils.Int64ToStr(refundOrder.AftersaleId)
} else { } else {
orderMsg.VendorOrderID = orderMsg.RefVendorOrderID orderMsg.VendorOrderID = orderMsg.RefVendorOrderID
} }
vendorOrgCode = refundOrder.ShopId vendorOrgCode = int(refundOrder.ShopId)
orderStatus = orderMsg orderStatus = orderMsg
case tiktokShop.CallbackRefundOrderRefuseMsgTagId: // 拒绝退款消息 case tiktokShop.CallbackRefundOrderRefuseMsgTagId: // 拒绝退款消息
refundOrder := msg.(tiktokShop.BusinessNotRefundRefusedData) refundOrder := msg.(tiktokShop.BusinessNotRefundRefusedData)

View File

@@ -494,7 +494,6 @@ func CreateFreightTemplate(storeCode, deliveryFeeDeductionSill int) (int64, erro
//}, //},
//} //}
} }
globals.SugarLogger.Debugf("CreateFreightTemplate 直辖市code====%d", param.Template.ProductCity)
if deliveryFeeDeductionSill != 0 { if deliveryFeeDeductionSill != 0 {
param.Template.TemplateName += "满减包邮模板" param.Template.TemplateName += "满减包邮模板"
param.Columns = []freightTemplate_create_request.ColumnsItem{{ param.Columns = []freightTemplate_create_request.ColumnsItem{{
@@ -601,7 +600,6 @@ func CreateBindFreeShipTemplate(vendorOrgCode string, storeID int, shipFee int64
} else { } else {
param.Template.ProductCity = int64(storeDetail.CityCode) param.Template.ProductCity = int64(storeDetail.CityCode)
} }
globals.SugarLogger.Debugf("CreateBindFreeShipTemplate 直辖市code=%d", param.Template.ProductCity)
if resp, err := getAPI(vendorOrgCode, 0, "").FreightTemplateCreate(param); err != nil { if resp, err := getAPI(vendorOrgCode, 0, "").FreightTemplateCreate(param); err != nil {
return errors.New(fmt.Sprintf("平台门店(%s) 京西门店(%d) 创建包邮模板失败:%v,根据提示处理", storeDetail.VendorStoreID, storeID, err)) return errors.New(fmt.Sprintf("平台门店(%s) 京西门店(%d) 创建包邮模板失败:%v,根据提示处理", storeDetail.VendorStoreID, storeID, err))
} else { } else {

View File

@@ -116,7 +116,6 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v
if err = getAPI(storeSkuList[0].VendorOrgCode, storeID, vendorStoreID).DeleteStoreCommodity(utils.Str2Int64(v.VendorSkuID)); err != nil { if err = getAPI(storeSkuList[0].VendorOrgCode, storeID, vendorStoreID).DeleteStoreCommodity(utils.Str2Int64(v.VendorSkuID)); err != nil {
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "删除子商品")...) failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "删除子商品")...)
} }
dao.DeleteThingToTiktokMapList(model.VendorIDDD, v.VendorMainId, storeSkuList[0].SkuID)
} }
} }
if len(failedList) > 0 { if len(failedList) > 0 {

View File

@@ -226,6 +226,8 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
} else if localThing[0].SyncStatus == model.ThingTypeSyncSuccess { } else if localThing[0].SyncStatus == model.ThingTypeSyncSuccess {
// 主商品存在,直接同步子商品 // 主商品存在,直接同步子商品
childrenProductId, err := api.CreateSubProduct(utils.Str2Int64(localThing[0].VendorThingID), utils.Str2Int64(vendorStoreID)) childrenProductId, err := api.CreateSubProduct(utils.Str2Int64(localThing[0].VendorThingID), utils.Str2Int64(vendorStoreID))
globals.SugarLogger.Debugf("==========:%s", localThing[0].VendorThingID)
globals.SugarLogger.Debugf("==========:%v", err)
if err != nil && strings.Contains(err.Error(), "2010004") { // 2010004:主商品非在线审核通过状态,不允许绑定子商品 if err != nil && strings.Contains(err.Error(), "2010004") { // 2010004:主商品非在线审核通过状态,不允许绑定子商品
// 线上本地都存在,但是线上审核不成功,就去更新主商品 // 线上本地都存在,但是线上审核不成功,就去更新主商品
mainOrderDetail = loadMainProductId(api, storeSku, localThing[0].VendorThingID) mainOrderDetail = loadMainProductId(api, storeSku, localThing[0].VendorThingID)
@@ -498,7 +500,6 @@ func makeMainProductSku(db *dao.DaoDB, api *tiktokShop.API, storeSku *dao.StoreS
} }
func getTiktokBrandId(api *tiktokShop.API, db *dao.DaoDB, upc, upcBrandName, upcTiktokBrandId string, categoryLeafId int64) (int64, error) { func getTiktokBrandId(api *tiktokShop.API, db *dao.DaoDB, upc, upcBrandName, upcTiktokBrandId string, categoryLeafId int64) (int64, error) {
globals.SugarLogger.Debugf("upc:%s,upcBrandName:%s,upcTiktokBrandId:%s,categoryLeafId:%d", upc, upcBrandName, upcTiktokBrandId, categoryLeafId)
if upc == "" { // 默认品牌京西菜市 596120136 if upc == "" { // 默认品牌京西菜市 596120136
return 596120136, nil return 596120136, nil
} else if upc != "" && upcBrandName != "" && upcTiktokBrandId != "" { } else if upc != "" && upcBrandName != "" && upcTiktokBrandId != "" {

View File

@@ -275,7 +275,6 @@ func (p *PurchaseHandler) setStoreOrderSeq(order *model.GoodsOrder) {
db := dao.GetDB() db := dao.GetDB()
if err := dao.GetRow(db, &count, sql, order.StoreID, dateBegin, model.VendorIDWSC); err == nil { if err := dao.GetRow(db, &count, sql, order.StoreID, dateBegin, model.VendorIDWSC); err == nil {
order.OrderSeq = count + 1 order.OrderSeq = count + 1
globals.SugarLogger.Debugf("setStoreOrderSeq orderID:%s, dateBegin:%s, orderSeq:%d", order.VendorOrderID, utils.Time2Str(dateBegin), order.OrderSeq)
} else { } else {
globals.SugarLogger.Errorf("setStoreOrderSeq orderID:%s failed with error:%v", order.VendorOrderID, err) globals.SugarLogger.Errorf("setStoreOrderSeq orderID:%s failed with error:%v", order.VendorOrderID, err)
} }

View File

@@ -116,7 +116,8 @@ dingdingCallbackURL = "http://callback.test.jxc4.com/dingding/msg"
dingdingCorpID = "ding7ab5687f3784a8db" dingdingCorpID = "ding7ab5687f3784a8db"
alipayAppID = "2019110769024042" alipayAppID = "2019110769024042"
alipayPrivateKey = "MIIEpAIBAAKCAQEAjI46NiIj+Z19+ll4FFR+xss2N69jD5b31LtZVONM8CqNKCe7eBYx6y2pfslgg8R9Xj67PEmc/30euoG7bW23ow6QCj2fS0K2AZBA+TuEbtDpSFr0CUqS+tc/4nEurSyLOOt53ijNFPfVTT56Kl2h0mXLBDA5nvEKlzZTNimJcM/r4yyz4N72zXqfjT7cVTE/3cx6f4fkD3EsYdrxzIAruAYEywqraexLI1oIotGqufBemUhHdcOJquJJtxRLfYC000nEovHFtq1RhtakKRz8j80Edp0X+Dk1vA6JY1sVXnIFh/9QFyT70uFc77GPgwh7OT/qWvWnkBIbY+TGO7+dVQIDAQABAoIBAHQ0do4g5ctO2UOsyqlMPlBO2/Fn8KeH8jgP+MhE8GwzUebcCpM7DmRYqSRoi4IFZn0Psi8i0UktgcVC0tmi90s5E/9TeSp46g8a24zzFwejcutePxqbbC803N1zI9sK08PocyYoZ32pdNFbEReLt+lCPXmmAU2WDWJ9CIjkCHyaO+eadwqckc8VDGuBZU44pKrDDjlYfaWJk3bi7DJ2YqIGL+i0rm+1vVuK7qFTX9fHeeedperVwuBjjA5SPC6xn8I0Uq55fUQ36KQok53VIOzk5HrtiFw9GRBmULthY4/WT7mh44uG93hb+dzFvFNaK1tqgpPwqQTcGuYCNPTkmLUCgYEA4klP52ho3A4+VWXznjblzL2T/uzQPTTbeLUtLoLfKNGg+JiCTc8rJsVFalTyRXPEK8UHveM3/rR0aCc10mh07XHFG6XD7Md20jtTdHoag4HF+aubW2jY6SmbUXlWDxe7FcxRvaP8R2XxacFyIOT41ehphsS1tghU/ipbEDf01N8CgYEAnwMMIfp0ZGNm0IgYVHHKVmqfTC/ZW6epHGyfr/6mQ8hiU5arp2rHWtGUdF3EQFEJu69n8tUYK8hAoCOoPXrnEzMQdLhi389u+2dh8bKuliFzpJy0Ug0z9y4AIzdvCcuKoBMPGV4Db6adXFEHRgR1NIdsQegrtSjvuzgbGIZiwEsCgYEAxX805QRkmMM5tjEgOlMxp8tCUvl/Ghx6/NQsFe8VNDwZ4T7CY4TP5avBVPfE58cNTSJPCnU41u3Kt2iZegW/H8nvPZ0k7hB87SnoQb2cTHDESI91LYfJ4V5199sNuGh+2ZyVLw3jzrDzzdiPcpRFdfS9vWkMK08EVzzCc9pSrkMCgYBkO4iHVpfNu/bQVil3+W6BAJ6/aJ4Lr2jjOPmD9/IYYhTQ+fXkB2P4tIluvLh7jlmjTFMq9/ZPiuBp0XA4qONF7/dci+oPiHM92BIeR/LTQezig8EKw7XRBtchW80LkJkmhD0NUXy7AXzJ922tThwPa5nrBY2fmVlcW2aBFBzldwKBgQCl7y3eMG77BwD0nHxPHopWL6jsowNwxwMyN9eg40yemhfYol8+AhfouRuzaMCzROY9p5nY1N/jmPRa1dM7lXvZuij0ugwIebQXFhEjRtxtENbY5nRU4wlS7Y69oLSqFrQmW/MZbiCuIa6yXirSbEPIUojhHBI17yqq5yRD1vEHGQ==" # alipayPrivateKey = "MIIEpAIBAAKCAQEAjI46NiIj+Z19+ll4FFR+xss2N69jD5b31LtZVONM8CqNKCe7eBYx6y2pfslgg8R9Xj67PEmc/30euoG7bW23ow6QCj2fS0K2AZBA+TuEbtDpSFr0CUqS+tc/4nEurSyLOOt53ijNFPfVTT56Kl2h0mXLBDA5nvEKlzZTNimJcM/r4yyz4N72zXqfjT7cVTE/3cx6f4fkD3EsYdrxzIAruAYEywqraexLI1oIotGqufBemUhHdcOJquJJtxRLfYC000nEovHFtq1RhtakKRz8j80Edp0X+Dk1vA6JY1sVXnIFh/9QFyT70uFc77GPgwh7OT/qWvWnkBIbY+TGO7+dVQIDAQABAoIBAHQ0do4g5ctO2UOsyqlMPlBO2/Fn8KeH8jgP+MhE8GwzUebcCpM7DmRYqSRoi4IFZn0Psi8i0UktgcVC0tmi90s5E/9TeSp46g8a24zzFwejcutePxqbbC803N1zI9sK08PocyYoZ32pdNFbEReLt+lCPXmmAU2WDWJ9CIjkCHyaO+eadwqckc8VDGuBZU44pKrDDjlYfaWJk3bi7DJ2YqIGL+i0rm+1vVuK7qFTX9fHeeedperVwuBjjA5SPC6xn8I0Uq55fUQ36KQok53VIOzk5HrtiFw9GRBmULthY4/WT7mh44uG93hb+dzFvFNaK1tqgpPwqQTcGuYCNPTkmLUCgYEA4klP52ho3A4+VWXznjblzL2T/uzQPTTbeLUtLoLfKNGg+JiCTc8rJsVFalTyRXPEK8UHveM3/rR0aCc10mh07XHFG6XD7Md20jtTdHoag4HF+aubW2jY6SmbUXlWDxe7FcxRvaP8R2XxacFyIOT41ehphsS1tghU/ipbEDf01N8CgYEAnwMMIfp0ZGNm0IgYVHHKVmqfTC/ZW6epHGyfr/6mQ8hiU5arp2rHWtGUdF3EQFEJu69n8tUYK8hAoCOoPXrnEzMQdLhi389u+2dh8bKuliFzpJy0Ug0z9y4AIzdvCcuKoBMPGV4Db6adXFEHRgR1NIdsQegrtSjvuzgbGIZiwEsCgYEAxX805QRkmMM5tjEgOlMxp8tCUvl/Ghx6/NQsFe8VNDwZ4T7CY4TP5avBVPfE58cNTSJPCnU41u3Kt2iZegW/H8nvPZ0k7hB87SnoQb2cTHDESI91LYfJ4V5199sNuGh+2ZyVLw3jzrDzzdiPcpRFdfS9vWkMK08EVzzCc9pSrkMCgYBkO4iHVpfNu/bQVil3+W6BAJ6/aJ4Lr2jjOPmD9/IYYhTQ+fXkB2P4tIluvLh7jlmjTFMq9/ZPiuBp0XA4qONF7/dci+oPiHM92BIeR/LTQezig8EKw7XRBtchW80LkJkmhD0NUXy7AXzJ922tThwPa5nrBY2fmVlcW2aBFBzldwKBgQCl7y3eMG77BwD0nHxPHopWL6jsowNwxwMyN9eg40yemhfYol8+AhfouRuzaMCzROY9p5nY1N/jmPRa1dM7lXvZuij0ugwIebQXFhEjRtxtENbY5nRU4wlS7Y69oLSqFrQmW/MZbiCuIa6yXirSbEPIUojhHBI17yqq5yRD1vEHGQ=="
alipayPrivateKey = "MIIEogIBAAKCAQEAilPMZeE7xXewRQrfwmbEbYgfn5oY5NHUR5RSbgaDohp6CdtOXL1IGEMuQ/OA3Zrx7Yd5Et5rX7d+k3BUz42k+7Xxu2opk3mBZB2UGWvBLzMcWCE0K/OQH89cJl8N3NX1V2ylrmhNQIqbRfkFunc1dnovhPZBzgSUDHnRcc4JzRI79/6HMxUN36+gfnkShhp92flM1ZYdpj6dYtwWiz5geaCXCLS9RVDIAN+6wl2ie9fiEu4gL8XWi+BrESGUC0R/r9QjoAir+5c7xAbdIPHqhRnXz18xoJorBtLnaMbYR3hoMZq/b4AgukgOJEPwsiewCGMqsyyZRAli9jFQHPByiQIDAQABAoIBAHncqU13x7iHYPryQX56GsKEEZgBoby0PldxC81yX7UHrkvQsJBzEHiPdsrWUsjoIAoqNzewStfgR9qMM6tGFfrKp1N8i3Qorx0MEdTzYRW76VSaq+Osh2P+wifrxcKvm5yRUsT7jlM1yOU0JR/ItYjSy9pPOFnPHr5+801XPrsx8aC+4ZS9oLewyou8yB0piRbyk4PiY2lf/JP6TkQt85ajNjcTLOTh+xLmIR692Z5mJcRT3N+yekpYrETAs4TiSQNgM/C17KreXjJQ97257rqcvOzdvAQwkus9kpbStFTadGMZAp5Q+ItbfDhKY0n/x9h50thoLUZBBk7Y8Bx3qCECgYEAvSKy0KxgZjr4Zw7utj6VNnSWLzkXVVpD2GjuHQgMe4tWm5xBBAbx8W72Y2sgHBoYUNtnblNmNgA1QI2/EtUWdGRnXePXu6RxB+I21PUDNw2hCXUR0v8dPxd80Yxjii31LSutEPq7NNeWkV3RNJal5ejc6RDT7nhQ9M4y8gXp7xsCgYEAuzrQVO1dVaT+KHXJV2AqjL3EQxOMQ8r9MMsBXicXZdm4faFnwIPdXcRPxBNjKK6UziV/ztNUw5IBQyReh9sG7ZRijz8S5+UF4hTA+5W8xb//EaK5TnJ3rP2zPnTkqCEJu/BERzx1paHVPq7LbxQmlVcHyODVktv5W+OJULFvaysCgYAdNKZ4IqYgIysIfv3NloxkBEzMrfw0aePgHxPl18BVs4aEMPS5MnlZ1tClOX2T2VO36KloF+jIne+bMEg5GD6HapmrnetKRnJNzVi6ObttXOVpGHLQKiTSAUZ89TjJtZ8OgpgO7yjJWCEgAWS0wi6L+hFiy/5t7JZTtyOWy+L70QKBgCOnT4TcrqlgggWyaGT7Kx8iA/3B+zPts8lW3yvOxeXfUAKceeVvNvhkKcxs5LUaibu36F66X6neY98lTdsRGoCjgSFGIZOHSVeEHDvMh+YgabIyCpeltKR8q2V5XRGnOPNRDa+DE+Q2rSUCpDrC25YUvKbEKeeNfC7DZaK4Jz+BAoGAPEYYdZXtQbOCXGyPU6CS6W5a2IlOWIpDFCMD+S+qFZBnkqCtBgS0CtQGLEL5t4gYsOBuWUreIxy0UAUIlFFGsDmwqsHu9jHi49LDcAhkciV886nYb/2qCFXo6oiZRBV65Xfai973dHqaVftmZWBsLT+cKJ7eRYHx//uGyJWe/04="
feieUser = "jianhua.xu@rosy.net.cn" feieUser = "jianhua.xu@rosy.net.cn"
feieKey = "2JfKh8TyheQ9mwss" feieKey = "2JfKh8TyheQ9mwss"
@@ -233,8 +234,8 @@ dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&l
getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken" getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken"
getYLYTokenURL = "http://www.jxc4.com/v2/sys/GetYLYToken" getYLYTokenURL = "http://www.jxc4.com/v2/sys/GetYLYToken"
tiktokAppKey = "tta6a1d01c399f264201" tiktokAppKey = "ttaceeda5333d7a7ab01"
tiktokAppSecret = "5c08a0465cf0f996af254a03b6c2548defef87ad" tiktokAppSecret = "020c0aa40371cd112eecc034bb3dc094907ff925"
tiktokJXDJKey="ttaceeda5333d7a7ab01" #京西到家抖音小程序 tiktokJXDJKey="ttaceeda5333d7a7ab01" #京西到家抖音小程序
TiktokJXDJApiID="ttaceeda5333d7a7ab01" TiktokJXDJApiID="ttaceeda5333d7a7ab01"
@@ -373,8 +374,8 @@ uuOpenID="8d8464e7c9354c1e88a3f5afa2a7922e"
jxPrintAppID = "1000" jxPrintAppID = "1000"
jxPrintAppKey = "rfBd56ti2SMtYvSg" jxPrintAppKey = "rfBd56ti2SMtYvSg"
tiktokAppKey = "tta6a1d01c399f264201" tiktokAppKey = "ttaceeda5333d7a7ab01"
tiktokAppSecret = "5c08a0465cf0f996af254a03b6c2548defef87ad" tiktokAppSecret = "020c0aa40371cd112eecc034bb3dc094907ff925"
tiktokJXDJKey="ttaceeda5333d7a7ab01" #京西到家抖音小程序 tiktokJXDJKey="ttaceeda5333d7a7ab01" #京西到家抖音小程序
TiktokJXDJApiID="ttaceeda5333d7a7ab01" TiktokJXDJApiID="ttaceeda5333d7a7ab01"
@@ -497,8 +498,8 @@ jxPrintAppID = "1000"
jxPrintAppKey = "rfBd56ti2SMtYvSg" jxPrintAppKey = "rfBd56ti2SMtYvSg"
storeName = "京西果园" storeName = "京西果园"
tiktokAppKey = "tta6a1d01c399f264201" tiktokAppKey = "ttaceeda5333d7a7ab01"
tiktokAppSecret = "5c08a0465cf0f996af254a03b6c2548defef87ad" tiktokAppSecret = "020c0aa40371cd112eecc034bb3dc094907ff925"
tiktokJXDJKey="ttaceeda5333d7a7ab01" #京西到家抖音小程序 tiktokJXDJKey="ttaceeda5333d7a7ab01" #京西到家抖音小程序
TiktokJXDJApiID="ttaceeda5333d7a7ab01" TiktokJXDJApiID="ttaceeda5333d7a7ab01"
@@ -699,8 +700,8 @@ uuOpenID="8d8464e7c9354c1e88a3f5afa2a7922e"
jxPrintAppID = "1000" jxPrintAppID = "1000"
jxPrintAppKey = "rfBd56ti2SMtYvSg" jxPrintAppKey = "rfBd56ti2SMtYvSg"
tiktokAppKey = "tta6a1d01c399f264201" tiktokAppKey = "ttaceeda5333d7a7ab01"
tiktokAppSecret = "5c08a0465cf0f996af254a03b6c2548defef87ad" tiktokAppSecret = "020c0aa40371cd112eecc034bb3dc094907ff925"
tiktokJXDJKey="ttaceeda5333d7a7ab01" #京西到家抖音小程序 tiktokJXDJKey="ttaceeda5333d7a7ab01" #京西到家抖音小程序
TiktokJXDJApiID="ttaceeda5333d7a7ab01" TiktokJXDJApiID="ttaceeda5333d7a7ab01"

View File

@@ -11,6 +11,7 @@ import (
"git.rosy.net.cn/jx-callback/business/partner/purchase/tiktok_store" "git.rosy.net.cn/jx-callback/business/partner/purchase/tiktok_store"
"git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals"
"github.com/astaxie/beego/server/web" "github.com/astaxie/beego/server/web"
"strings"
"time" "time"
) )
@@ -742,6 +743,7 @@ func (c *SkuController) RefreshNoImgSku() {
// @Param categoryID query int false "商品名所属类别ID" // @Param categoryID query int false "商品名所属类别ID"
// @Param status query int false "查询起始状态0下架1正常, -1全部" // @Param status query int false "查询起始状态0下架1正常, -1全部"
// @Param isBySku query bool false "是否将sku拆开缺省为false" // @Param isBySku query bool false "是否将sku拆开缺省为false"
// @Param bestSeller query int false "是否为畅销品[0-不是/1-是]"
// @Param offset query int false "门店列表起始序号以0开始缺省为0" // @Param offset query int false "门店列表起始序号以0开始缺省为0"
// @Param pageSize query int false "门店列表页大小缺省为50-1表示全部" // @Param pageSize query int false "门店列表页大小缺省为50-1表示全部"
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult
@@ -751,12 +753,28 @@ func (c *SkuController) GetSkuNamesNew() {
c.callGetSkuNamesNew(func(params *tSkuGetSkuNamesNewParams) (retVal interface{}, errCode string, err error) { c.callGetSkuNamesNew(func(params *tSkuGetSkuNamesNewParams) (retVal interface{}, errCode string, err error) {
var skuIDs, skuNameIDs []int var skuIDs, skuNameIDs []int
if err = jxutils.Strings2Objs(params.SkuIDs, &skuIDs, params.NameIDs, &skuNameIDs); err == nil { if err = jxutils.Strings2Objs(params.SkuIDs, &skuIDs, params.NameIDs, &skuNameIDs); err == nil {
retVal, err = cms.GetSkuNamesNew(params.Ctx, params.Keyword, skuIDs, skuNameIDs, params.CategoryID, params.Status, params.IsBySku, params.Offset, params.PageSize) retVal, err = cms.GetSkuNamesNew(params.Ctx, params.Keyword, skuIDs, skuNameIDs, params.CategoryID, params.Status, params.IsBySku, params.Offset, params.PageSize, params.BestSeller)
} }
return retVal, "", err return retVal, "", err
}) })
} }
// @Title 设置商品为热销/取消热销商品
// @Description 设置商品为热销/取消热销商品
// @Param token header string true "认证token"
// @Param skuNameId query string true "商品nameId,多个用逗号分割"
// @Param bestSeller query int true "是否为热销[0不是/1是]"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /SetSkuBestSeller [post]
func (c *SkuController) SetSkuBestSeller() {
c.callSetSkuBestSeller(func(params *tSkuSetSkuBestSellerParams) (retVal interface{}, errCode string, err error) {
nameIds := strings.Split(params.SkuNameId, ",")
err = cms.SetSkuNameSeller(utils.StringSlice2Int64(nameIds), params.BestSeller)
return nil, "", err
})
}
// @Title 根据分类id获取平台属性值 // @Title 根据分类id获取平台属性值
// @Description 根据分类id获取平台属性值 // @Description 根据分类id获取平台属性值
// @Param token header string true "认证token" // @Param token header string true "认证token"

View File

@@ -2,6 +2,7 @@ package controllers
import ( import (
"git.rosy.net.cn/baseapi/platformapi/jdapi" "git.rosy.net.cn/baseapi/platformapi/jdapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/auth2" "git.rosy.net.cn/jx-callback/business/auth2"
"git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model"
@@ -1039,3 +1040,18 @@ func (c *StoreSkuController) CopyMtToJd() {
return retVal, "", err return retVal, "", err
}) })
} }
// @Title 美团门店复制到美团
// @Description 美团门店复制到美团
// @Param token header string true "认证token"
// @Param fromStoreID formData string true "被复制门店id"
// @Param toStoreID formData string true "复制到门店id"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /CopyMtToMt [post]
func (c *StoreSkuController) CopyMtToMt() {
c.callCopyMtToMt(func(params *tStoreSkuCopyMtToMtParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.CopyOnStoreSkuToOther(params.Ctx, utils.Str2Int(params.FromStoreID), utils.Str2Int(params.ToStoreID), false)
return retVal, errCode, err
})
}

View File

@@ -2,7 +2,6 @@ package controllers
import ( import (
"encoding/json" "encoding/json"
"git.rosy.net.cn/jx-callback/business/partner/purchase/im" "git.rosy.net.cn/jx-callback/business/partner/purchase/im"
"github.com/astaxie/beego/server/web" "github.com/astaxie/beego/server/web"
) )
@@ -16,13 +15,9 @@ type IMController struct {
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult
// @router /StartWebSocket [get] // @router /StartWebSocket [get]
//func (c *IMController) StartWebSocket() { func (c *IMController) StartWebSocket() {
// var ( im.StartWebSocket(c.Ctx.ResponseWriter, c.Ctx.Request)
// w http.ResponseWriter }
// r *http.Request
// )
// im.StartWebSocket(w, r)
//}
// @Title IM获取门店用户聊天列表 // @Title IM获取门店用户聊天列表
// @Description IM获取门店用户聊天列表 // @Description IM获取门店用户聊天列表

View File

@@ -2,6 +2,7 @@ package controllers
import ( import (
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"git.rosy.net.cn/jx-callback/business/bidding" "git.rosy.net.cn/jx-callback/business/bidding"
"strings" "strings"
@@ -827,6 +828,46 @@ func (c *OrderController) RefreshHistoryOrdersEarningPrice() {
// @router /PartRefundOrder [put] // @router /PartRefundOrder [put]
func (c *OrderController) PartRefundOrder() { func (c *OrderController) PartRefundOrder() {
c.callPartRefundOrder(func(params *tOrderPartRefundOrderParams) (retVal interface{}, errCode string, err error) { c.callPartRefundOrder(func(params *tOrderPartRefundOrderParams) (retVal interface{}, errCode string, err error) {
var skuList []*model.OrderSku
err = jxutils.Strings2Objs(params.RefundSkuList, &skuList)
if err == nil {
if params.VendorID == model.VendorIDJX {
return nil, "", errors.New("京西小程序暂未开启此功能")
}
_, _, skuList = skuList2Map(skuList)
var order *model.GoodsOrder
order, err = partner.CurOrderManager.LoadOrder(params.VendorOrderID, params.VendorID)
if err == nil {
removedAll, err2 := fillSkuList(skuList, order.Skus)
if err = err2; err == nil {
if removedAll {
err = defsch.FixedScheduler.RefundOrder(params.Ctx, order, params.Reason)
} else {
err = defsch.FixedScheduler.PartRefundOrder(params.Ctx, order, skuList, params.Reason)
}
}
}
}
return retVal, "", err
})
}
// @Title 小程序用户申请售后(退款)
// @Description 小程序用户申请售后(退款)
// @Param token header string true "认证token"
// @Param vendorOrderID formData string true "订单ID"
// @Param vendorID formData int true "订单所属厂商ID"
// @Param refundSkuList formData string true "要去除的商品信息只有skuID与Count字段有效"
// @Param reason formData string true "原因"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /ApplyRefundOrder [post]
func (c *OrderController) ApplyRefundOrder() {
c.callApplyRefundOrder(func(params *tOrderApplyRefundOrderParams) (retVal interface{}, errCode string, err error) {
// 微信,支付宝-通联,(抖音-抖音支付,快手-快手支付) 小程序,下单时不区分平台,支付时区分()
// 1- 创建afsOrder 售后单
// 2-
var skuList []*model.OrderSku var skuList []*model.OrderSku
err = jxutils.Strings2Objs(params.RefundSkuList, &skuList) err = jxutils.Strings2Objs(params.RefundSkuList, &skuList)
if err == nil { if err == nil {

View File

@@ -0,0 +1,72 @@
package controllers
import (
"git.rosy.net.cn/baseapi/platformapi/kuaishou_mini"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/partner/purchase/jx/localjx"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/globals/api"
"github.com/astaxie/beego/server/web"
)
type KuaiShouController struct {
web.Controller
}
// KuaiShouCallBack 快手回调
func (c *KuaiShouController) KuaiShouCallback() {
payOrder, refundOrder, payType, msgId, err := api.KuaiShouApi.KauiShouCallback(c.Ctx.Request)
globals.SugarLogger.Debugf("KuaiShouCallBack payOrder =: %s", utils.Format4Output(payOrder, false))
globals.SugarLogger.Debugf("KuaiShouCallBack refundOrder=: %s", refundOrder)
globals.SugarLogger.Debugf("KuaiShouCallBack payType=: %s", payType)
globals.SugarLogger.Debugf("KuaiShouCallBack err=: %s", utils.Format4Output(err, false))
if err != nil {
c.Data["json"] = CallBackFail(msgId)
c.ServeJSON()
return
}
switch payType {
case kuaishou_mini.CallbackTypePay:
err = localjx.OnKSPayCallback(payOrder, nil, payType)
case kuaishou_mini.CallbackTypeRefund:
err = localjx.OnKSPayCallback(nil, refundOrder, payType)
case kuaishou_mini.CallbackTypeSettle:
c.Data["json"] = CallBackFail(msgId)
c.ServeJSON()
return
default:
c.Data["json"] = CallBackFail(msgId)
c.ServeJSON()
return
}
if err != nil {
c.Data["json"] = CallBackFail(msgId)
c.ServeJSON()
return
}
c.Data["json"] = CallBackSuccess(msgId)
c.ServeJSON()
return
}
type CallBackResult struct {
Result string `json:"result"`
MessageId string `json:"message_id"`
}
func CallBackSuccess(msgId string) *CallBackResult {
return &CallBackResult{
Result: "1",
MessageId: msgId,
}
}
func CallBackFail(msgId string) *CallBackResult {
return &CallBackResult{
Result: "-1",
MessageId: msgId,
}
}

View File

@@ -1466,6 +1466,15 @@ func init() {
Filters: nil, Filters: nil,
Params: nil}) Params: nil})
web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
web.ControllerComments{
Method: "ApplyRefundOrder",
Router: `/ApplyRefundOrder`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"], web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
web.ControllerComments{ web.ControllerComments{
Method: "PrintOrder", Method: "PrintOrder",
@@ -1862,6 +1871,15 @@ func init() {
Filters: nil, Filters: nil,
Params: nil}) Params: nil})
web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
web.ControllerComments{
Method: "SetSkuBestSeller",
Router: `/SetSkuBestSeller`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
web.ControllerComments{ web.ControllerComments{
Method: "GetTiktokCategoryValue", Method: "GetTiktokCategoryValue",
@@ -3200,6 +3218,15 @@ func init() {
Filters: nil, Filters: nil,
Params: nil}) Params: nil})
web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
web.ControllerComments{
Method: "CopyMtToMt",
Router: `/CopyMtToMt`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"], web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
web.ControllerComments{ web.ControllerComments{
Method: "GetStoresSkusSaleInfo", Method: "GetStoresSkusSaleInfo",
@@ -4329,14 +4356,14 @@ func init() {
MethodParams: param.Make(), MethodParams: param.Make(),
Filters: nil, Filters: nil,
Params: nil}) Params: nil})
//web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:IMController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:IMController"], web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:IMController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:IMController"],
// web.ControllerComments{ web.ControllerComments{
// Method: "StartWebSocket", Method: "StartWebSocket",
// Router: `/StartWebSocket`, Router: `/StartWebSocket`,
// AllowHTTPMethods: []string{"get"}, AllowHTTPMethods: []string{"get"},
// MethodParams: param.Make(), MethodParams: param.Make(),
// Filters: nil, Filters: nil,
// Params: nil}) Params: nil})
//web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:FnController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:FnController"], //web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:FnController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:FnController"],
// web.ControllerComments{ // web.ControllerComments{