1
This commit is contained in:
@@ -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 != "" {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
158
business/jxstore/cms/system_store_sku.go
Normal file
158
business/jxstore/cms/system_store_sku.go
Normal 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
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -495,6 +495,8 @@ func GuessVendorIDFromVendorStoreID(vendorStoreID int64) (vendorID int) {
|
|||||||
// vendorID = model.VendorIDWSC
|
// vendorID = model.VendorIDWSC
|
||||||
} else if vendorStoreID > 123456 && vendorStoreID < 654321 { // 京西门店ID,6位
|
} else if vendorStoreID > 123456 && vendorStoreID < 654321 { // 京西门店ID,6位
|
||||||
vendorID = model.VendorIDJX
|
vendorID = model.VendorIDJX
|
||||||
|
} else if vendorStoreID >= 100000000 { // 饿百出现九未id
|
||||||
|
vendorID = model.VendorIDEBAI
|
||||||
}
|
}
|
||||||
return vendorID
|
return vendorID
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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))),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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 // 微信支付
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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"` // 同一平台下不同的商户代码,如果只有一个,可以为空
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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"` // 门店等级(筛选用,京西的)
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -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)})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
191
business/partner/purchase/jx/localjx/kuaishou_pay.go
Normal file
191
business/partner/purchase/jx/localjx/kuaishou_pay.go
Normal 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(¶m)
|
||||||
|
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
|
||||||
|
}
|
||||||
@@ -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 != "" {
|
||||||
|
|||||||
@@ -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: // 支付回调
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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, "")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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: // 订单相关
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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 != "" {
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -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获取门店用户聊天列表
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
72
controllers/kuaishou_callback.go
Normal file
72
controllers/kuaishou_callback.go
Normal 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,
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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{
|
||||||
|
|||||||
Reference in New Issue
Block a user