Merge branch 'jdshop' of https://e.coding.net/rosydev/jx-callback into jdshop
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package bidding
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"git.rosy.net.cn/baseapi/platformapi/ali_logistics_query"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
|
||||
@@ -38,11 +39,15 @@ func LoadingLogistics(paramLogistic []*model.UpdateMaterialLogistic) []error {
|
||||
}
|
||||
|
||||
// 新订单,本地暂无物流信息,全部更新远端物流信息到本地
|
||||
if len(logisticsList.Info[0].LogisticsTraceDetailList) == model.NO {
|
||||
errList = append(errList, errors.New("运单号[%s]:已经过期/新订单暂无物流推送信息"))
|
||||
continue
|
||||
}
|
||||
var orderStatus = make([]*model.OrderStatus, 0, 0)
|
||||
goodsOrderStatus := 0
|
||||
for _, v := range logisticsList.Info[0].LogisticsTraceDetailList {
|
||||
orderStatusToLocal := &model.OrderStatus{
|
||||
VendorOrderID: logisticsList.OrderNo,
|
||||
VendorOrderID: logisticsList.Info[0].MailNo,
|
||||
VendorID: model.VendorIDTotalWl,
|
||||
OrderType: model.OrderTypeWaybill,
|
||||
RefVendorOrderID: logistics.OrderId,
|
||||
@@ -108,20 +113,21 @@ func LoadingLogistics(paramLogistic []*model.UpdateMaterialLogistic) []error {
|
||||
statusTime := orderStatus[len(orderStatus)-1].StatusTime
|
||||
if len(wayBill) == 0 || wayBill == nil {
|
||||
wayBillObj := &model.Waybill{
|
||||
VendorWaybillID: logistics.LogisticId,
|
||||
WaybillVendorID: model.VendorIDTotalWl,
|
||||
VendorOrderID: logistics.OrderId,
|
||||
OrderVendorID: model.VendorIDJX,
|
||||
CourierName: logisticsList.Info[0].Courier,
|
||||
CourierMobile: logisticsList.Info[0].CourierPhone,
|
||||
Status: status,
|
||||
VendorStatus: vendorStatus,
|
||||
ActualFee: logistics.LogisticFee,
|
||||
DesiredFee: logistics.LogisticFee,
|
||||
DeliveryFlag: model.OrderDeliveryFlagMaskScheduleDisabled,
|
||||
WaybillCreatedAt: time.Now(),
|
||||
StatusTime: statusTime,
|
||||
ModelTimeInfo: model.ModelTimeInfo{CreatedAt: time.Now(), UpdatedAt: time.Now()},
|
||||
VendorWaybillID: logistics.LogisticId,
|
||||
WaybillVendorID: model.VendorIDTotalWl,
|
||||
VendorOrderID: logistics.OrderId,
|
||||
OrderVendorID: model.VendorIDJX,
|
||||
CourierName: logisticsList.Info[0].Courier,
|
||||
CourierMobile: logisticsList.Info[0].CourierPhone,
|
||||
Status: status,
|
||||
VendorStatus: vendorStatus,
|
||||
ActualFee: logistics.LogisticFee,
|
||||
DesiredFee: logistics.LogisticFee,
|
||||
DeliveryFlag: model.OrderDeliveryFlagMaskScheduleDisabled,
|
||||
WaybillCreatedAt: time.Now(),
|
||||
StatusTime: statusTime,
|
||||
ModelTimeInfo: model.ModelTimeInfo{CreatedAt: time.Now(), UpdatedAt: time.Now()},
|
||||
WaybillFinishedAt: time.Now(),
|
||||
}
|
||||
if err := dao.CreateEntity(db, wayBillObj); err != nil {
|
||||
errList = append(errList, err)
|
||||
@@ -132,6 +138,7 @@ func LoadingLogistics(paramLogistic []*model.UpdateMaterialLogistic) []error {
|
||||
wayBill[0].Status = status
|
||||
wayBill[0].VendorStatus = vendorStatus
|
||||
wayBill[0].StatusTime = statusTime
|
||||
wayBill[0].WaybillFinishedAt = time.Now()
|
||||
if _, err := dao.UpdateEntity(db, wayBill[0], "Status", "UpdatedAt", "VendorStatus", "StatusTime"); err != nil {
|
||||
errList = append(errList, err)
|
||||
continue
|
||||
|
||||
@@ -955,7 +955,7 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa
|
||||
}
|
||||
valid["printerBindInfo"] = ""
|
||||
if handler := partner.GetPrinterPlatformFromVendorID(store.PrinterVendorID); handler != nil {
|
||||
handler.UnregisterPrinter(ctx, store.PrinterSN, store.PrinterKey)
|
||||
handler.UnregisterPrinter(ctx, store.PrinterSN, utils.Int2Str(store.ID))
|
||||
}
|
||||
}
|
||||
if valid["soundPercentage"] != nil && valid["printerSN"] != nil {
|
||||
@@ -6095,3 +6095,7 @@ func BatchCreateFreeShipTemplate(relInfo map[string][]tiktok_store.RelInfo, ship
|
||||
func GetVendorStoreBind(vendorStoreId string, vendorId int) (int, error) {
|
||||
return dao.GetCodeAndIDByMeiTuan(vendorStoreId, vendorId)
|
||||
}
|
||||
|
||||
func BindJxPrintToStore(storeId int64, printSn, printKey string) error {
|
||||
return dao.BindJXPrintToStore(storeId, printSn, printKey)
|
||||
}
|
||||
|
||||
@@ -262,7 +262,6 @@ func (v *VendorSync) SyncStore2(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "删除门店")
|
||||
}
|
||||
} else {
|
||||
globals.SugarLogger.Debugf("3.UpdateStore")
|
||||
if err = handler.UpdateStore(db2, storeMap.StoreID, userName); err == nil {
|
||||
resultList = append(resultList, 1)
|
||||
} else {
|
||||
|
||||
@@ -485,8 +485,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
||||
now := jxutils.OperationTime2HourMinuteFormat(time.Now())
|
||||
var failedList []*partner.StoreSkuInfoWithErr
|
||||
for _, sku := range skus {
|
||||
if !useVendorPriceDirectly &&
|
||||
!isSkuLockTimeValid(sku) {
|
||||
if !useVendorPriceDirectly && !isSkuLockTimeValid(sku) {
|
||||
sku.VendorPrice = 0
|
||||
}
|
||||
sku.MergedStatus = MergeSkuSaleStatusWithStoreOpTime(sku, storeDetail, now)
|
||||
|
||||
@@ -2,7 +2,9 @@ package misc
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/platformapi/dingdingapi"
|
||||
"git.rosy.net.cn/jx-callback/business/bidding"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/ddmsg"
|
||||
"git.rosy.net.cn/jx-callback/business/partner/delivery"
|
||||
"git.rosy.net.cn/jx-callback/business/partner/purchase/tiktok_store"
|
||||
"sync"
|
||||
@@ -249,6 +251,13 @@ func Init() {
|
||||
cms.RefreshTiktokShopToken(jxcontext.AdminCtx)
|
||||
}, 60*time.Second, 30*time.Minute)
|
||||
|
||||
// 抖音更新门店商品
|
||||
if beego.BConfig.RunMode != "jxgy" {
|
||||
ScheduleTimerFuncByInterval(func() {
|
||||
syncStoreSkuTiktok()
|
||||
}, 60*time.Second, 10*time.Minute)
|
||||
}
|
||||
|
||||
// 定时任务刷新当前订单的物流信息
|
||||
ScheduleTimerFunc("RefreshMaterialLogistics", func() {
|
||||
bidding.LoadingLogistics(nil)
|
||||
@@ -568,6 +577,32 @@ func syncStoreSku() {
|
||||
tasksch.HandleTask(task, nil, true).Run()
|
||||
}
|
||||
|
||||
func syncStoreSkuTiktok() {
|
||||
syncFlag := 0 | model.SyncFlagSaleMask
|
||||
task := tasksch.NewParallelTask("同步京西商品到抖音平台,方案二使用", nil, jxcontext.AdminCtx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
step := batchItemList[0].(int)
|
||||
errList := errlist.New()
|
||||
db := dao.GetDB()
|
||||
switch step {
|
||||
case 0:
|
||||
if beego.BConfig.RunMode != "jxgy" {
|
||||
errList.AddErr(cms.DeleteSkuNameExPrefixOverdue(db))
|
||||
errList.AddErr(cms.SetMultiStoreSkuSyncModifyStatus(db, partner.GetMultiStoreVendorIDs()))
|
||||
_, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{model.VendorIDDD}, []int{668594}, false, nil, nil, syncFlag, true, true)
|
||||
errList.AddErr(err)
|
||||
}
|
||||
case 1:
|
||||
errList.AddErr(err)
|
||||
SaveImportantTaskID(TaskNameSyncStoreSku, SpecialTaskID)
|
||||
}
|
||||
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "2452A93EEB9111EC9B06525400E86DC0", "抖音同步商品", utils.Format4Output(errList, false))
|
||||
err = errList.GetErrListAsOne()
|
||||
return retVal, err
|
||||
}, []int{0, 1})
|
||||
tasksch.HandleTask(task, nil, true).Run()
|
||||
}
|
||||
|
||||
func doDailyWork2() {
|
||||
if beego.BConfig.RunMode == "jxgy" {
|
||||
syncStoreSku()
|
||||
|
||||
@@ -79,6 +79,7 @@ func BatchUpdateEntityByKV(db *DaoDB, items []*KVUpdateItem) (num int64, err err
|
||||
if r := recover(); r != nil {
|
||||
if item != nil {
|
||||
var bindID int64
|
||||
globals.SugarLogger.Debugf("========item.item %s", utils.Format4Output(item.Item, false))
|
||||
value := refutil.CheckAndGetStructValue(item.Item).FieldByName(model.FieldID)
|
||||
if value.IsValid() {
|
||||
bindID = value.Int()
|
||||
|
||||
@@ -1631,8 +1631,15 @@ func InsertIntoFreightTemplate(storeID int, vendorStoreID string, templateID, wa
|
||||
return err
|
||||
}
|
||||
|
||||
//只获取美团平台的京西storeID
|
||||
// GetCodeAndIDByMeiTuan 只获取美团平台的京西storeID
|
||||
func GetCodeAndIDByMeiTuan(vendorStoreID string, vendorId int) (storeID int, err error) {
|
||||
err = GetRow(GetDB(), &storeID, "SELECT s.store_id FROM store_map s WHERE s.vendor_store_id = ? AND s.vendor_id = ? ", vendorStoreID, vendorId)
|
||||
err = GetRow(GetDB(), &storeID, "SELECT s.store_id FROM store_map s WHERE s.vendor_store_id = ? AND s.vendor_id = ? AND s.deleted_at = ?", vendorStoreID, vendorId, utils.DefaultTimeValue)
|
||||
return storeID, err
|
||||
}
|
||||
|
||||
// BindJXPrintToStore 更新绑定门店的京西打印机 PrinterFontSize printer_sn printer_key printer_vendor_id printer_font_size
|
||||
func BindJXPrintToStore(storeId int64, printSn, printKey string) error {
|
||||
sql := ` UPDATE store SET printer_sn = ? , printer_key = ? , printer_vendor_id = ? , printer_font_size = ? WHERE id = ?`
|
||||
_, err := ExecuteSQL(GetDB(), sql, []interface{}{printSn, printKey, model.VendorIDJxprint, model.NO, storeId})
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -27,35 +27,37 @@ func GetThingMapList(db *DaoDB, thingType int, vendorIDs, thingIDs []int, vendor
|
||||
return cats, err
|
||||
}
|
||||
|
||||
func CreateThingMap(thingId int64, vendorThingID, appOrgCode, skuAttrId string) error {
|
||||
func CreateThingMap(thingId int64, vendorThingID, appOrgCode, err string, thingType, syncStatus int8) error {
|
||||
thingMap := &model.ThingMap{
|
||||
ThingID: thingId,
|
||||
ThingType: model.ThingTypeSku,
|
||||
ThingType: thingType,
|
||||
VendorID: model.VendorIDDD,
|
||||
VendorOrgCode: appOrgCode,
|
||||
VendorThingID: vendorThingID,
|
||||
Remark: skuAttrId,
|
||||
SyncStatus: 0,
|
||||
}
|
||||
// 正常来说这个skuAttrId 不应该为空
|
||||
if skuAttrId == "" {
|
||||
thingMap.Remark = "这个值不应该为空才对"
|
||||
Remark: err,
|
||||
SyncStatus: syncStatus,
|
||||
}
|
||||
|
||||
WrapAddIDCULDEntity(thingMap, "jxadmin")
|
||||
return CreateEntity(GetDB(), thingMap)
|
||||
}
|
||||
|
||||
func UpdateThingMap(thingMap *model.ThingMap) error {
|
||||
_, err := UpdateEntity(GetDB(), thingMap, "ID")
|
||||
return err
|
||||
}
|
||||
|
||||
// GetThingToTiktokMapList 抖店获取同步类型
|
||||
func GetThingToTiktokMapList(db *DaoDB, vendorId int, thingId int64) (cats []*model.ThingMap, err error) {
|
||||
func GetThingToTiktokMapList(db *DaoDB, vendorId int, thingId int64, vendorOrgCode string) (cats []*model.ThingMap, err error) {
|
||||
sql := `
|
||||
SELECT t1.*
|
||||
FROM thing_map t1
|
||||
WHERE t1.thing_id = ? AND t1.vendor_id = ? AND t1.deleted_at = ?
|
||||
WHERE t1.thing_id = ? AND t1.vendor_id = ? AND vendor_org_code = ? AND t1.deleted_at = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
thingId,
|
||||
vendorId,
|
||||
vendorOrgCode,
|
||||
utils.DefaultTimeValue,
|
||||
}
|
||||
|
||||
|
||||
@@ -93,9 +93,9 @@ const (
|
||||
SyncFlagSeqMask = 64 // 门店商家分类下的排序顺序
|
||||
|
||||
// combine
|
||||
SyncFlagStoreSkuOnlyMask = SyncFlagSaleMask | SyncFlagPriceMask | SyncFlagStockMask
|
||||
SyncFlagStoreSkuModifiedMask = SyncFlagStoreSkuOnlyMask | SyncFlagModifiedMask
|
||||
SyncFlagChangedMask = SyncFlagSpecMask | SyncFlagNewMask | SyncFlagDeletedMask | SyncFlagStoreSkuModifiedMask
|
||||
SyncFlagStoreSkuOnlyMask = SyncFlagSaleMask | SyncFlagPriceMask | SyncFlagStockMask // 同步标志存储仅Sku掩码
|
||||
SyncFlagStoreSkuModifiedMask = SyncFlagStoreSkuOnlyMask | SyncFlagModifiedMask // 同步标志存储Sku修改掩码
|
||||
SyncFlagChangedMask = SyncFlagSpecMask | SyncFlagNewMask | SyncFlagDeletedMask | SyncFlagStoreSkuModifiedMask // 同步标志已更改掩码
|
||||
)
|
||||
|
||||
func IsSyncStatusNew(syncStatus int8) bool {
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package model
|
||||
|
||||
const (
|
||||
ThingTypeCategory = 1
|
||||
ThingTypeSkuName = 2
|
||||
ThingTypeSku = 3
|
||||
ThingTypeStore = 4
|
||||
ThingTypeUser = 5
|
||||
ThingTypeOrder = 6
|
||||
ThingTypeCategory = 1 // 同步分类
|
||||
ThingTypeSkuName = 2 // 同步商品名称
|
||||
ThingTypeSku = 3 // 同步商品
|
||||
ThingTypeStore = 4 // 同步门店
|
||||
ThingTypeUser = 5 // 同步用户信息
|
||||
ThingTypeOrder = 6 // 同步订单
|
||||
)
|
||||
|
||||
type ThingMap struct {
|
||||
|
||||
@@ -85,12 +85,6 @@ func (c *DeliveryHandler) OnWaybillExcept(msg *mtpsapi.CallbackOrderExceptionMsg
|
||||
|
||||
func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *mtpsapi.CallbackResponse) {
|
||||
order := c.callbackMsg2Waybill(msg)
|
||||
if msg.Status == mtpsapi.OrderStatusPickedUp {
|
||||
order.Status = model.WaybillStatusCourierArrived
|
||||
mtpsapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), order.VendorStatus)
|
||||
defer delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||
msg.Status = mtpsapi.OrderStatusPickedUp
|
||||
}
|
||||
switch msg.Status {
|
||||
case mtpsapi.OrderStatusWaitingForSchedule:
|
||||
data, err := api.MtpsAPI.QueryOrderStatus(msg.DeliveryID, msg.MtPeisongID)
|
||||
@@ -123,6 +117,13 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m
|
||||
c.pushToGy(msg)
|
||||
return mtpsapi.SuccessResponse
|
||||
}
|
||||
|
||||
//if msg.Status == mtpsapi.OrderStatusPickedUp {
|
||||
// order.Status = model.WaybillStatusCourierArrived
|
||||
// mtpsapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), order.VendorStatus)
|
||||
// delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||
// msg.Status = mtpsapi.OrderStatusPickedUp
|
||||
//}
|
||||
// 加入调度器
|
||||
err := mtpsapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), order.VendorStatus)
|
||||
defer delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||
@@ -163,7 +164,6 @@ func pushMTPSToTiktok(msgStatus int, order *model.Waybill) {
|
||||
result.LogisticsStatus = 0
|
||||
result.LogisticsContext = model.RiderGetOrderDeliverOther
|
||||
}
|
||||
globals.SugarLogger.Debugf("===========================mtps:%s", utils.Format4Output(result, false))
|
||||
delivery.PullTiktokRiderInfo(result)
|
||||
if result.LogisticsStatus == model.WaybillStatusCourierArrived {
|
||||
result.LogisticsStatus = model.WaybillStatusDelivering
|
||||
@@ -232,8 +232,11 @@ func (c *DeliveryHandler) callbackMsg2Waybill(msg *mtpsapi.CallbackOrderMsg) (re
|
||||
var good *model.GoodsOrder
|
||||
sql := `SELECT * FROM goods_order WHERE vendor_order_id = ? ORDER BY order_created_at DESC LIMIT 1 OFFSET 0`
|
||||
sqlParams := []interface{}{msg.OrderID}
|
||||
dao.GetRow(dao.GetDB(), &good, sql, sqlParams)
|
||||
retVal.OrderVendorID = good.VendorID
|
||||
if err := dao.GetRow(dao.GetDB(), &good, sql, sqlParams); err != nil || good == nil || good.VendorOrderID == "" {
|
||||
retVal.OrderVendorID = 0
|
||||
} else {
|
||||
retVal.OrderVendorID = good.VendorID
|
||||
}
|
||||
return retVal
|
||||
}
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
|
||||
if orderId == "" { // 订单id为空是,是定时轮询操作,不做此状态
|
||||
waybillList, _ := dao.GetWaybills(dao.GetDB(), v.VendorOrderID)
|
||||
if len(waybillList) > 0 && waybillList[0].Status > model.WaybillStatusEndBegin {
|
||||
globals.SugarLogger.Debug("订单物流状态结束,不在推送订单状态:orderID[%s],wayBillId[%s]", v.VendorOrderID, waybillList[0].VendorWaybillID)
|
||||
globals.SugarLogger.Debugf("订单物流状态结束,不在推送订单状态:orderID[%s],wayBillId[%s]", v.VendorOrderID, waybillList[0].VendorWaybillID)
|
||||
continue
|
||||
}
|
||||
}
|
||||
@@ -151,7 +151,6 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
|
||||
}
|
||||
|
||||
func PullTiktokRiderInfo(riderInfo *mtpsapi.RiderInfo) {
|
||||
globals.SugarLogger.Debugf("==================riderInfo:%s", utils.Format4Output(riderInfo, false))
|
||||
switch riderInfo.LogisticsStatus {
|
||||
case 5: // 呼叫骑手
|
||||
riderInfo.LogisticsStatus = 0
|
||||
@@ -193,7 +192,6 @@ func PullTiktokRiderInfo(riderInfo *mtpsapi.RiderInfo) {
|
||||
// 呼叫骑手的时候推送发货
|
||||
// 抖店由于发配送时运单id已经固定了,我们系统在重新发货,或者运单号发生改变时去推送信息时.抖店只识别第一个运单号所以在这儿修改成发单时的第一个运单号!
|
||||
paramsMap := utils.Struct2Map(riderInfo, "", true)
|
||||
globals.SugarLogger.Debugf("==================paramsMap:%s", utils.Format4Output(paramsMap, false))
|
||||
if handler := partner.GetPurchaseOrderHandlerFromVendorID(model.VendorIDDD); handler != nil {
|
||||
if err := handler.GetOrderRider("", "", paramsMap); err != nil {
|
||||
globals.SugarLogger.Errorf("PullTiktokRiderInfo Err %s", err.Error())
|
||||
@@ -297,6 +295,7 @@ func UpdateFakeWayBillToTiktok() {
|
||||
if handler := partner.GetPurchaseOrderHandlerFromVendorID(model.VendorIDDD); handler != 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)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -42,3 +42,11 @@ func TestRegisterPrinter(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetPrinterStatus(t *testing.T) {
|
||||
sn, err := CurPrinterHandler.GetPrinterStatus(nil, "922591501", "fczh8zwv")
|
||||
t.Log(sn)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ func (c *PrinterHandler) RegisterPrinter(ctx *jxcontext.Context, id1, id2, print
|
||||
|
||||
func (c *PrinterHandler) UnregisterPrinter(ctx *jxcontext.Context, id1, id2 string) (err error) {
|
||||
if globals.EnableStoreWrite {
|
||||
err = api.JxPrintAPI.DelPrinter([]string{id1})
|
||||
err = api.JxPrintAPI.DelPrinter([]string{id1}, id2)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ func ManagerOrderPrint(order *model.GoodsOrder, storeTel string, storeDetail *da
|
||||
printOrder[VendorName] = jxutils.GetVendorName(order.VendorID)
|
||||
printOrder[VendorOrderNo] = utils.Int2Str(order.OrderSeq)
|
||||
printOrder[EBaiCode] = jxutils.GetEbaiOrderGetCode(order)
|
||||
printOrder[QRCOrder] = utils.Int2Str(order.OrderSeq)
|
||||
printOrder[QRCOrder] = order.VendorOrderID
|
||||
printOrder[ConsigneeName] = order.ConsigneeName
|
||||
printOrder[ConsigneeMobile] = order.ConsigneeMobile
|
||||
printOrder[ConsigneeAddress] = order.ConsigneeAddress
|
||||
|
||||
@@ -193,6 +193,7 @@ func skuInfo2Param(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (param *jd
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) CreateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) {
|
||||
globals.SugarLogger.Debugf("是不是正儿八经的京东商城%s", "CreateSku2")
|
||||
param := skuInfo2Param(ctx, sku)
|
||||
if globals.EnableJdStoreWrite {
|
||||
sku.VendorSkuID, err = getAPI(sku.VendorOrgCode).AddSku2(param)
|
||||
@@ -218,6 +219,7 @@ func (p *PurchaseHandler) CreateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSy
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) UpdateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) {
|
||||
globals.SugarLogger.Debugf("是不是正儿八经的京东商城%s", "UpdateSku2")
|
||||
param := skuInfo2Param(ctx, sku)
|
||||
if globals.EnableJdStoreWrite {
|
||||
_, err = getAPI(sku.VendorOrgCode).UpdateSku2(param)
|
||||
@@ -226,7 +228,7 @@ func (p *PurchaseHandler) UpdateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSy
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) DeleteSku2(ctx *jxcontext.Context, vendorOrgCode string, sku *partner.StoreSkuInfo) (err error) {
|
||||
|
||||
globals.SugarLogger.Debugf("是不是正儿八经的京东商城%s", "DeleteSku2")
|
||||
// 京东到家只能通过商家ID删除SKU,如果没有的话,先绑定,再删除
|
||||
if sku.SkuID == 0 {
|
||||
skuPairList := []*jdapi.SkuIDPair{
|
||||
|
||||
@@ -43,8 +43,6 @@ func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, v
|
||||
//flag2 := false
|
||||
//var wareStatusUpdateWareID string
|
||||
result, err := getAPI(v.VendorOrgCode).SearchWare4Valid(name, 1, 100) // 搜索有效商品
|
||||
globals.SugarLogger.Debugf("========result %s", utils.Format4Output(result, false))
|
||||
globals.SugarLogger.Debugf("========result %s", err)
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "创建商品")
|
||||
return failedList, err
|
||||
@@ -299,6 +297,7 @@ 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) {
|
||||
globals.SugarLogger.Debugf("是不是正儿八经的京东商城%s", "UpdateStoreSkus")
|
||||
if globals.EnableJdShopWrite && vendorStoreID == model.JdShopMainVendorStoreID {
|
||||
if vendorStoreID == model.JdShopMainVendorStoreID {
|
||||
for _, v := range storeSkuList {
|
||||
|
||||
@@ -260,6 +260,11 @@ func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo
|
||||
if product["upc"] != nil && product["upc"].(string) != "" {
|
||||
sku.Upc = product["upc"].(string)
|
||||
}
|
||||
_, _, _, specUnit, _, specQuality := jxutils.SplitSkuName(sku.SkuName)
|
||||
nameWeight := jxutils.FormatSkuWeight(specQuality, specUnit)
|
||||
if nameWeight == 0 {
|
||||
skuName += " " + product["spec"].(string)
|
||||
}
|
||||
if sku.VendorSkuID == "" {
|
||||
if !strings.Contains(product["app_food_code"].(string), "mtcode") {
|
||||
sku.VendorSkuID = product["app_food_code"].(string)
|
||||
|
||||
@@ -197,7 +197,6 @@ func (p *PurchaseHandler) DeleteStoreCategory(ctx *jxcontext.Context, storeID in
|
||||
|
||||
//批量更新商品进货价
|
||||
func BatchSetRestockingPrice(ctx *jxcontext.Context, storeID int, vendorStoreID string, param []*mtwmapi.SpuData) error {
|
||||
globals.SugarLogger.Debugf("test getStoreVendorOrgCode(storeID)==========%s", getStoreVendorOrgCode(storeID))
|
||||
if err := getAPI(getStoreVendorOrgCode(storeID), storeID, "").BatchSetRestockingPrice(ctx.GetTrackInfo(), vendorStoreID, param); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -344,6 +343,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
}
|
||||
|
||||
}
|
||||
globals.SugarLogger.Debugf("foodDataList=======mtwm %s", utils.Format4Output(foodDataList, false))
|
||||
if globals.EnableMtwmStoreWrite {
|
||||
if len(foodDataList) == 1 {
|
||||
foodDataList[0]["skus"] = string(utils.MustMarshal(foodDataList[0]["skus"]))
|
||||
|
||||
@@ -3,8 +3,10 @@ package tiktok_store
|
||||
import (
|
||||
"encoding/json"
|
||||
tiktokShop "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
|
||||
"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/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
"net/http"
|
||||
"strings"
|
||||
@@ -12,6 +14,7 @@ import (
|
||||
|
||||
// OnOrderMsg 抖音
|
||||
func OnOrderMsg(msgId string, msg interface{}) (response *tiktokShop.CallbackResponse) {
|
||||
globals.SugarLogger.Debugf("GetCallbackOrderId tiktok msg %s", utils.Format4Output(msg, false))
|
||||
if CurPurchaseHandler != nil {
|
||||
orderId, shopId, _ := api.TiktokStore.GetCallbackOrderId(msgId, msg)
|
||||
if shopId != 0 {
|
||||
|
||||
@@ -178,7 +178,8 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode, vendorOrderID, vendorStoreID s
|
||||
|
||||
// 预订单还是快速达
|
||||
localStore, err := dao.GetStoreDetailByVendorStoreID(dao.GetDB(), vendorStoreIdRelly, model.VendorIDDD, vendorOrgCode)
|
||||
if err != nil {
|
||||
if err != nil || localStore == nil || localStore.ID == 0 {
|
||||
globals.SugarLogger.Debugf("平台门店未绑定到京西系统 %s", err.Error())
|
||||
return nil, nil, err
|
||||
}
|
||||
// 订单不在门店营业时间来的订单,
|
||||
@@ -593,9 +594,6 @@ func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName s
|
||||
AddressId: 0,
|
||||
StoreId: utils.Str2Int64(order.VendorStoreID),
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
@@ -646,10 +644,19 @@ func (c *PurchaseHandler) SelfDeliverDelivering(order *model.GoodsOrder, userNam
|
||||
|
||||
// SelfDeliverDelivered 自配搜完成(暂无)
|
||||
func (c *PurchaseHandler) SelfDeliverDelivered(order *model.GoodsOrder, userName string) (err error) {
|
||||
//if globals.EnableMtwmStoreWrite {
|
||||
// err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").OrderArrived(utils.Str2Int64(order.VendorOrderID))
|
||||
//}
|
||||
return err
|
||||
riderInfo := &mtpsapi.RiderInfo{
|
||||
OrderId: order.VendorOrderID,
|
||||
ThirdCarrierOrderId: order.VendorOrderID,
|
||||
CourierName: "",
|
||||
CourierPhone: "",
|
||||
LogisticsProviderCode: "10002",
|
||||
LogisticsStatus: 0,
|
||||
LogisticsContext: "商家自配送,已送达",
|
||||
Latitude: "",
|
||||
Longitude: "",
|
||||
OpCode: tiktokShop.TiktokLogisticsDELIVERED,
|
||||
}
|
||||
return c.GetOrderRider("", "", utils.Struct2MapByJson(riderInfo))
|
||||
}
|
||||
|
||||
func getTimeFromTimestamp(timeStamp int64) time.Time {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package tiktok_store
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
product_listV2_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_listV2/request"
|
||||
@@ -76,62 +75,6 @@ func (p *PurchaseHandler) IsErrCategoryNotExist(err error) (isNotExist bool) {
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) {
|
||||
//level := 1
|
||||
//if storeCat.ParentCatName != "" {
|
||||
// level = 2
|
||||
//}
|
||||
//originName := ""
|
||||
//catName := storeCat.Name
|
||||
//catCode := storeCat.ID
|
||||
//
|
||||
//subCatName := ""
|
||||
//subCatCode := 0
|
||||
//if storeCat.CatSyncStatus&model.SyncFlagNewMask == 0 {
|
||||
// // 修改一级分类
|
||||
// originName = storeCat.VendorCatID
|
||||
//}
|
||||
//if level == 2 { // 二级分类
|
||||
// // 创建二级分类
|
||||
// originName = storeCat.ParentVendorCatID
|
||||
// catName = storeCat.ParentCatName
|
||||
// catCode = storeCat.ParentID
|
||||
// subCatName = storeCat.Name
|
||||
// subCatCode = storeCat.ID
|
||||
// if storeCat.CatSyncStatus&model.SyncFlagNewMask == 0 {
|
||||
// // 修改二级分类
|
||||
// originName = storeCat.VendorCatID
|
||||
// catName = storeCat.Name
|
||||
// catCode = storeCat.ID
|
||||
// subCatName = ""
|
||||
// subCatCode = 0
|
||||
// }
|
||||
//}
|
||||
//if catName == "" {
|
||||
// panic("catName is empty")
|
||||
//}
|
||||
//catName = utils.FilterEmoji(catName)
|
||||
//subCatName = utils.FilterEmoji(subCatName)
|
||||
// vendorStoreID, originName, catCode, catName, subCatCode, subCatName, storeCat.Seq)
|
||||
//if globals.EnableMtwmStoreWrite {
|
||||
// // err = api.MtwmAPI.RetailCatUpdate2(vendorStoreID, tryCatName2Code(originName), originName, catCode2Str(catCode), catName, catCode2Str(subCatCode), subCatName, storeCat.Seq)
|
||||
// param4Update := &mtwmapi.Param4UpdateCat{
|
||||
// CategoryCodeOrigin: tryCatName2Code(originName),
|
||||
// CategoryNameOrigin: originName,
|
||||
// CategoryCode: catCode2Str(catCode),
|
||||
// SecondaryCategoryCode: catCode2Str(subCatCode),
|
||||
// SecondaryCategoryName: subCatName,
|
||||
// Sequence: storeCat.Seq,
|
||||
// }
|
||||
// err = getAPI(storeCat.VendorOrgCode, storeID, vendorStoreID).RetailCatUpdate(vendorStoreID, catName, param4Update)
|
||||
// if storeCat.CatSyncStatus&model.SyncFlagNewMask == 0 && p.IsErrCategoryNotExist(err) && originName != "" { // 修改分类名,但分类不存在
|
||||
// storeCat.CatSyncStatus |= model.SyncFlagNewMask
|
||||
// err = p.CreateStoreCategory(ctx, storeID, vendorStoreID, storeCat)
|
||||
// }
|
||||
//}
|
||||
//if err == nil {
|
||||
// // storeCat.VendorCatID = utils.FilterEmoji(storeCat.Name)
|
||||
// storeCat.VendorCatID = utils.Int2Str(storeCat.ID)
|
||||
//}
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -140,23 +83,6 @@ func (p *PurchaseHandler) UpdateStoreCategory(ctx *jxcontext.Context, storeID in
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) DeleteStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID, vendorCatID string, level int) (err error) {
|
||||
//if false {
|
||||
// if globals.EnableMtwmStoreWrite {
|
||||
// err = getAPI(getStoreVendorOrgCode(storeID), storeID, vendorStoreID).RetailCatDelete(vendorStoreID, tryCatName2Code(vendorCatID), vendorCatID)
|
||||
// }
|
||||
//} else {
|
||||
// var catCodes []string
|
||||
// if catCode := tryCatName2Code(vendorCatID); catCode != "" {
|
||||
// catCodes = []string{catCode}
|
||||
// }
|
||||
// if globals.EnableMtwmStoreWrite {
|
||||
// if level == 1 {
|
||||
// err = getAPI(getStoreVendorOrgCode(storeID), storeID, vendorStoreID).RetailCatSkuBatchDelete2(ctx.GetTrackInfo(), vendorStoreID, catCodes, []string{vendorCatID}, nil, nil, nil)
|
||||
// } else {
|
||||
// err = getAPI(getStoreVendorOrgCode(storeID), storeID, vendorStoreID).RetailCatSkuBatchDelete2(ctx.GetTrackInfo(), vendorStoreID, nil, nil, catCodes, []string{vendorCatID}, nil)
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -169,34 +95,14 @@ func (p *PurchaseHandler) IsErrSkuNotExist(err error) (isNotExist bool) {
|
||||
return mtwmapi.IsErrSkuNotExist(err)
|
||||
}
|
||||
|
||||
// func duplicateStoreSkuList(storeSkuList []*dao.StoreSkuSyncInfo, index int) (newStoreSkuList []*dao.StoreSkuSyncInfo) {
|
||||
// newStoreSkuList = make([]*dao.StoreSkuSyncInfo, len(storeSkuList))
|
||||
// for k, v := range storeSkuList {
|
||||
// tmp := *v
|
||||
// tmp.SkuName = fmt.Sprintf("%s.%d", tmp.SkuName, index)
|
||||
// tmp.SkuID = index*1000000 + tmp.SkuID
|
||||
// newStoreSkuList[k] = &tmp
|
||||
// }
|
||||
// return newStoreSkuList
|
||||
// }
|
||||
func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||
failedList, err = p.createOrUpdateStoreSkus(ctx, storeID, vendorStoreID, storeSkuList, false)
|
||||
// if err == nil && vendorStoreID == specialStoreID {
|
||||
// for i := 0; i < 2; i++ {
|
||||
// p.createOrUpdateStoreSkus(ctx, storeID, vendorStoreID, duplicateStoreSkuList(storeSkuList, i+1), true)
|
||||
// }
|
||||
// }
|
||||
return failedList, err
|
||||
}
|
||||
|
||||
// CreateStoreSkus 门店创建商品
|
||||
func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||
failedList, err = p.createOrUpdateStoreSkus(ctx, storeID, vendorStoreID, storeSkuList, true)
|
||||
//if err == nil && vendorStoreID == specialStoreID {
|
||||
// for i := 0; i < 2; i++ {
|
||||
// p.createOrUpdateStoreSkus(ctx, storeID, vendorStoreID, duplicateStoreSkuList(storeSkuList, i+1), true)
|
||||
// }
|
||||
//}
|
||||
return failedList, err
|
||||
}
|
||||
|
||||
@@ -207,7 +113,7 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v
|
||||
continue
|
||||
}
|
||||
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)
|
||||
}
|
||||
@@ -224,16 +130,12 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr
|
||||
if status == model.SkuStatusNormal { // 下架
|
||||
for _, v := range storeSkuList {
|
||||
// 子品商品id获取skuId
|
||||
childrenSku, err := api.GetSkuDetail(v.VendorSkuID, "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
childrenSkuId, failedList := getProductSkuId4UpdateStock(api, v, storeID)
|
||||
if len(failedList) > 0 {
|
||||
continue
|
||||
}
|
||||
if len(childrenSku.SpecPrices) <= 0 {
|
||||
return nil, errors.New("子品商品详情获取失败")
|
||||
}
|
||||
|
||||
param := &sku_syncStock_request.SkuSyncStockParam{
|
||||
SkuId: childrenSku.SpecPrices[0].SkuId,
|
||||
SkuId: childrenSkuId,
|
||||
ProductId: utils.Str2Int64(v.VendorSkuID),
|
||||
Incremental: false,
|
||||
IdempotentId: "",
|
||||
@@ -241,23 +143,19 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr
|
||||
OutWarehouseId: vendorStoreID,
|
||||
}
|
||||
if err := api.UpdateSkuStock(param); err != nil {
|
||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], fmt.Sprintf("下架架商品异常,添加固定库存.%s", utils.Format4Output(param, false)))...)
|
||||
} else {
|
||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], fmt.Sprintf("下架商品异常,添加固定库存.%s", utils.Format4Output(param, false)))...)
|
||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], fmt.Sprintf("上架商品,库存值最大化.%s", utils.Format4Output(param, false)))...)
|
||||
}
|
||||
}
|
||||
} else { // 上架
|
||||
for _, v := range storeSkuList {
|
||||
// 子品商品id获取skuId
|
||||
childrenSku, err := api.GetSkuDetail(v.VendorSkuID, "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(childrenSku.SpecPrices) <= 0 {
|
||||
return nil, errors.New("子品商品详情获取失败")
|
||||
childrenSkuId, failedList := getProductSkuId4UpdateStock(api, v, storeID)
|
||||
if len(failedList) > 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
param := &sku_syncStock_request.SkuSyncStockParam{
|
||||
SkuId: childrenSku.SpecPrices[0].SkuId,
|
||||
SkuId: childrenSkuId,
|
||||
ProductId: utils.Str2Int64(v.VendorSkuID),
|
||||
Incremental: false,
|
||||
IdempotentId: "",
|
||||
@@ -265,75 +163,69 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr
|
||||
OutWarehouseId: vendorStoreID,
|
||||
}
|
||||
if err := api.UpdateSkuStock(param); err != nil {
|
||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], fmt.Sprintf("上架商品异常,添加固定库存.%s", utils.Format4Output(param, false)))...)
|
||||
} else {
|
||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], fmt.Sprintf("上架商品正常,添加固定库存.%s", utils.Format4Output(param, false)))...)
|
||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], fmt.Sprintf("下架商品,库存值为0失败.%s", utils.Format4Output(param, false)))...)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(failedList) > 0 {
|
||||
err = nil
|
||||
}
|
||||
return failedList, err
|
||||
}
|
||||
|
||||
// UpdateStoreSkusPrice 更新商品价格
|
||||
func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||
api := getAPI(vendorOrgCode, storeID, vendorStoreID)
|
||||
globals.SugarLogger.Debugf("看看走这儿了没,是不是更新 storeSkuList %s", utils.Format4Output(storeSkuList, false))
|
||||
for _, v := range storeSkuList {
|
||||
// 更新主品 (暂不支持渠道主商品)
|
||||
err = api.EditPrice(&sku_editPrice_request.SkuEditPriceParam{
|
||||
tiktokSkuId, failedList := getProductSkuId4UpdateStock(api, v, storeID)
|
||||
if len(failedList) > 0 {
|
||||
globals.SugarLogger.Debugf("看看走这儿了没,是不是更新 参数failedList1 %s", utils.Format4Output(failedList, false))
|
||||
return failedList, err
|
||||
}
|
||||
globals.SugarLogger.Debugf("====SkuId:= %d,ProductId := %d ", tiktokSkuId, utils.Str2Int64(v.VendorMainId))
|
||||
price := &sku_editPrice_request.SkuEditPriceParam{
|
||||
Price: v.VendorPrice,
|
||||
SkuId: utils.Str2Int64(v.VendorSkuAttrId),
|
||||
ProductId: utils.Str2Int64(v.VendorMainId),
|
||||
})
|
||||
if err != nil {
|
||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新主品价格异常")...)
|
||||
SkuId: tiktokSkuId,
|
||||
ProductId: utils.Str2Int64(v.VendorSkuID),
|
||||
}
|
||||
|
||||
// 更新子品
|
||||
if _, err := api.BatchApplyStoreProductPrice(utils.Str2Int64(v.VendorMainId)); err != nil {
|
||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "同步子品价格异常")...)
|
||||
//更新子品
|
||||
if err = api.EditPrice(price); err != nil {
|
||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新价格异常")...)
|
||||
}
|
||||
//err = api.EditPrice(&sku_editPrice_request.SkuEditPriceParam{
|
||||
// Price: v.VendorPrice,
|
||||
// SkuId: utils.Str2Int64(v.VendorSonSkuID),
|
||||
// ProductId: utils.Str2Int64(v.VendorSkuID),
|
||||
//})
|
||||
//if err != nil {
|
||||
// failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新价格异常")...)
|
||||
//} else {
|
||||
// failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新价格正常")...)
|
||||
//}
|
||||
}
|
||||
|
||||
if len(failedList) > 0 {
|
||||
err = nil
|
||||
globals.SugarLogger.Debugf("看看走这儿了没,是不是更新 参数 %s", utils.Format4Output(price, false))
|
||||
globals.SugarLogger.Debugf("看看走这儿了没,是不是更新 返回值 %s", utils.Format4Output(failedList, false))
|
||||
globals.SugarLogger.Debugf("看看走这儿了没,是不是更新 结构体 %s", utils.Format4Output(v, false))
|
||||
}
|
||||
return failedList, err
|
||||
}
|
||||
|
||||
// 全量/增量更新商品sku库存
|
||||
// UpdateStoreSkusStock 全量/增量更新商品sku库存
|
||||
func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||
tiktokApi := getAPI(storeSkuList[0].VendorOrgCode, storeID, vendorStoreID)
|
||||
for _, v := range storeSkuList {
|
||||
err := tiktokApi.UpdateSkuStock(&sku_syncStock_request.SkuSyncStockParam{
|
||||
SkuId: utils.Str2Int64(v.VendorSkuAttrId),
|
||||
// 子品商品id获取skuId
|
||||
childrenSkuId, failedList := getProductSkuId4UpdateStock(tiktokApi, v, storeID)
|
||||
if len(failedList) > 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
stockNum := &sku_syncStock_request.SkuSyncStockParam{
|
||||
SkuId: childrenSkuId,
|
||||
ProductId: utils.Str2Int64(v.VendorSkuID),
|
||||
Incremental: false,
|
||||
IdempotentId: "",
|
||||
StockNum: int64(v.Stock),
|
||||
OutWarehouseId: vendorStoreID,
|
||||
})
|
||||
if err != nil {
|
||||
}
|
||||
if stockNum.StockNum == 0 {
|
||||
stockNum.StockNum = 99999
|
||||
}
|
||||
|
||||
if err := tiktokApi.UpdateSkuStock(stockNum); err != nil {
|
||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新库存错误")...)
|
||||
} else {
|
||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新库存正常")...)
|
||||
}
|
||||
}
|
||||
|
||||
return p.UpdateStoreSkusPrice(ctx, vendorOrgCode, storeID, vendorStoreID, storeSkuList)
|
||||
return failedList, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetStoreSkusFullInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (skuNameList []*partner.SkuNameInfo, err error) {
|
||||
|
||||
@@ -14,7 +14,8 @@ import (
|
||||
product_listV2_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_listV2/response"
|
||||
shop_bindStoreFreight_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_bindStoreFreight/request"
|
||||
shop_bindStoreSaleLimit_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_bindStoreSaleLimit/request"
|
||||
superm_product_batchRedistributeStoreProduct_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/superm_product_batchRedistributeStoreProduct/request"
|
||||
sku_editPrice_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/sku_editPrice/request"
|
||||
sku_syncStock_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/sku_syncStock/request"
|
||||
trade_createTradeLimitTemplate_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/trade_createTradeLimitTemplate/request"
|
||||
tiktokShop "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
@@ -27,6 +28,8 @@ import (
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"math/rand"
|
||||
"strings"
|
||||
"time"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
type MainSku struct {
|
||||
@@ -151,28 +154,16 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
PickupMethod: "0",
|
||||
OuterProductId: utils.Int2Str(storeSku.SkuID), // 本地skuId为外部商品id
|
||||
}
|
||||
globals.SugarLogger.Debugf("=======================1")
|
||||
globals.SugarLogger.Debugf("=======================param %s", utils.Format4Output(param, false))
|
||||
if len(param.Name) < 23 { // 中文字符一个汉字三个长度符号/数字/字母两个长度,商品名称不能大于
|
||||
param.Name += utils.Float64ToStr(float64(storeSku.SpecQuality)) + "/" + storeSku.SpecUnit
|
||||
if len(param.Name) < 23 {
|
||||
param.Name += "【惊喜到家】"
|
||||
}
|
||||
} else if len(param.Name) > 90 { // 抖音最大60个字符,三十个汉字
|
||||
param.Name = param.Name[0:90]
|
||||
}
|
||||
param.Name = checkNameLenght(param.Name)
|
||||
|
||||
// 获取上传图,商品轮播图
|
||||
img, detailImg, err := GetTiktokImgList(api, utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.DescImg, storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5)
|
||||
globals.SugarLogger.Debugf("=======================img %s", img)
|
||||
globals.SugarLogger.Debugf("=======================detailImg %s", detailImg)
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
continue
|
||||
}
|
||||
param.Pic = img
|
||||
param.Description = detailImg
|
||||
globals.SugarLogger.Debugf("=======================2")
|
||||
|
||||
// 部分商品没有所属的分类,直接跳过!
|
||||
if storeSku.SkuVendorMapCatID != "" {
|
||||
@@ -180,14 +171,13 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
} else if len(param.Pic) != 0 { // 自动推导分类id
|
||||
param.CategoryLeafId = api.GetRecommendCategory(strings.Split(img, "|"))
|
||||
}
|
||||
globals.SugarLogger.Debugf("=======================3")
|
||||
// 这个情况是原有商品不存在和推荐查询不到类目id是,使用京西类目和抖音类目的绑定关系
|
||||
// 但是不太实用,导致商品类目错误被暂停营业等
|
||||
//if storeSku.VendorVendorCatID != 0 && param.CategoryLeafId == 0 {
|
||||
// param.CategoryLeafId = storeSku.VendorVendorCatID
|
||||
//}
|
||||
if param.CategoryLeafId == 0 {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, errors.New("当前商品本地未设置抖音分类/抖音推荐分类查询错误"), storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, errors.New("当前商品本地未设置抖音分类/抖音推荐分类查询错误"), storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
continue
|
||||
}
|
||||
// 是否支持七天无理由
|
||||
@@ -196,7 +186,6 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
} else {
|
||||
param.Supply7dayReturn = 0
|
||||
}
|
||||
globals.SugarLogger.Debugf("=======================4")
|
||||
|
||||
// weight_unit 目前抖音只支持g和kg两种
|
||||
param.WeightUnit = tiktokShop.WeightUint_G
|
||||
@@ -211,141 +200,145 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
} else {
|
||||
param.ProductFormatNew, err = MakeProductFormatNew(api, int64(storeSku.NameID), param.CategoryLeafId)
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
param.StandardBrandId = 789194134 // 默认品牌京西菜市 596120136
|
||||
globals.SugarLogger.Debugf("=======================5")
|
||||
|
||||
temp, err := dao.QueryStoreBindInfo(storeDetail.Store.ID)
|
||||
if err != nil || temp == nil || temp.ID == 0 {
|
||||
// 运费模板
|
||||
param.FreightId, err = GetDeliveryTemp(api, vendorStoreID, storeDetail)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 获取门店限售模板
|
||||
param.SaleLimitId, err = CreateSaleTemp(utils.Str2Int64(vendorStoreID), api)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 保存数据库
|
||||
freightTemplate := &model.FreightTemplate{
|
||||
StoreID: storeSku.StoreID,
|
||||
VendorStoreID: storeDetail.VendorStoreID,
|
||||
TemplateID: param.FreightId,
|
||||
WarehouseID: 0,
|
||||
FenceID: "",
|
||||
TradeLimitID: param.SaleLimitId,
|
||||
}
|
||||
err = dao.CreateEntity(db, freightTemplate)
|
||||
} else {
|
||||
if temp.TemplateID != 0 {
|
||||
param.FreightId = temp.TemplateID
|
||||
} else {
|
||||
// 运费模板
|
||||
param.FreightId, err = GetDeliveryTemp(api, vendorStoreID, storeDetail)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
temp.TemplateID = param.FreightId
|
||||
_, err = dao.UpdateEntity(db, temp, "TemplateID")
|
||||
dao.FreightTemplateMap[temp.StoreID] = temp
|
||||
}
|
||||
if temp.TradeLimitID != 0 {
|
||||
param.SaleLimitId = temp.TradeLimitID
|
||||
} else {
|
||||
// 获取门店限售模板
|
||||
param.SaleLimitId, err = CreateSaleTemp(utils.Str2Int64(vendorStoreID), api)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
temp.TradeLimitID = param.SaleLimitId
|
||||
_, err = dao.UpdateEntity(db, temp, "TradeLimitID")
|
||||
dao.FreightTemplateMap[temp.StoreID] = temp
|
||||
}
|
||||
param.FreightId, param.SaleLimitId, err = getFreightIdAndSaleLimitId(api, db, storeDetail, vendorStoreID)
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
continue
|
||||
}
|
||||
globals.SugarLogger.Debugf("=======================6")
|
||||
|
||||
// 根据本地商品id获取线上商品是否存在,存在则只创建子商品
|
||||
var tiktokResultProductId int64 = 0
|
||||
// 获取本地存储映射关系,获取本地主商品id是否存在
|
||||
localThing, err := dao.GetThingToTiktokMapList(db, model.VendorIDDD, int64(storeSku.SkuID))
|
||||
localThing, _ := dao.GetThingToTiktokMapList(db, model.VendorIDDD, int64(storeSku.SkuID), storeDetail.VendorOrgCode)
|
||||
mainOrderDetail, err := api.GetSkuDetailLocalID("", utils.Int2Str(storeSku.SkuID))
|
||||
if len(localThing) == 0 {
|
||||
// 看看本地保存了没,没有的话可能该商品没创建主商品!查查线上有没有
|
||||
mainOrderDetail, err := api.GetSkuDetailLocalID("", utils.Int2Str(storeSku.SkuID))
|
||||
if err != nil || mainOrderDetail == nil || mainOrderDetail.ProductIdStr == "" {
|
||||
tiktokResult, err := api.CreateStoreCommodity(param) // 创建主商品
|
||||
tiktokResult, err := api.CreateStoreCommodity(param) // 创建主商品,同步主商品
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
continue
|
||||
}
|
||||
if err := dao.CreateThingMap(int64(storeSku.SkuID), utils.Int64ToStr(tiktokResult.ProductId), storeDetail.VendorOrgCode, "本地不存在,线上也不存在", model.ThingTypeSku, 0); err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
}
|
||||
|
||||
tiktokResultProductId = tiktokResult.ProductId
|
||||
var attrId []string
|
||||
for _, v := range tiktokResult.Sku {
|
||||
attrId = append(attrId, utils.Int64ToStr(v.SkuId))
|
||||
}
|
||||
storeSku.VendorSkuAttrId = strings.Join(attrId, ",") // 属性id skuID
|
||||
err = dao.CreateThingMap(int64(storeSku.SkuID), utils.Int64ToStr(tiktokResult.ProductId), storeDetail.VendorOrgCode, storeSku.VendorSkuAttrId)
|
||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
||||
storeSku.SkuSyncStatus = model.SyncFlagNewMask // 只创建主品,子品都没做
|
||||
storeSku.VendorMainId = utils.Int64ToStr(tiktokResult.ProductId)
|
||||
storeSku.VendorSkuAttrId = strings.Join(attrId, ",") // 属性id skuID
|
||||
storeSku.VendorSonSkuID = utils.Int2Str(storeSku.SkuID) // 还没同步子商品
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, errors.New("只创建了主商品,没创建子商品"), storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
} else {
|
||||
// 本地不存在,线上存在.直接创建子商品保存本地同步记录
|
||||
var childrenProductId int64 = 0
|
||||
if mainOrderDetail.CheckStatus != tiktokShop.SkuCheckStatusPass && mainOrderDetail.CheckStatus != tiktokShop.SkuCheckStatusPassNotPutOn {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, fmt.Errorf("主商品审核中或审核失败:[%d]", storeSku.SkuID), storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
continue
|
||||
}
|
||||
|
||||
if err := dao.CreateThingMap(int64(storeSku.SkuID), mainOrderDetail.ProductIdStr, storeDetail.VendorOrgCode, storeSku.VendorSkuAttrId, model.ThingTypeSku, 0); err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
}
|
||||
|
||||
childrenProductId, err = api.CreateSubProduct(mainOrderDetail.MainProductId, utils.Str2Int64(vendorStoreID))
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
continue
|
||||
}
|
||||
|
||||
storeSku.VendorMainId = mainOrderDetail.ProductIdStr
|
||||
var attrId []string
|
||||
for _, v := range mainOrderDetail.SpecPrices {
|
||||
attrId = append(attrId, utils.Int64ToStr(v.SkuId))
|
||||
}
|
||||
storeSku.VendorSkuAttrId = strings.Join(attrId, ",") // 属性id skuID
|
||||
tiktokResultProductId = mainOrderDetail.ProductId
|
||||
if childrenProductId > 0 {
|
||||
storeSku.VendorSonSkuID = utils.Int64ToStr(childrenProductId) // (属性id skuID方案一)(自商品的商品id方案二)
|
||||
storeSku.VendorSkuID = utils.Int64ToStr(childrenProductId) // 子商品主id
|
||||
failedList = upDateChildrenPriceStockLaunch(api, storeSku, childrenProductId, vendorStoreID, syncType)
|
||||
} else {
|
||||
storeSku.VendorSonSkuID = utils.Int2Str(storeSku.SkuID) // (属性id skuID方案一)(自商品的商品id方案二)
|
||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID) // 子商品主id
|
||||
storeSku.SkuSyncStatus = model.SyncFlagNewMask
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, errors.New("主商品创建了,子商品为创建"), storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
storeSku.VendorMainId = localThing[0].VendorThingID
|
||||
storeSku.VendorSkuAttrId = localThing[0].Remark // 属性id skuID
|
||||
tiktokResultProductId = utils.Str2Int64(localThing[0].VendorThingID)
|
||||
}
|
||||
|
||||
// 上面说明要么已经创建了主商品,要么已经重新创建了主商品,将该商品同步到子门店就可以了.
|
||||
childrenProductId, err := api.CreateSubProduct(param.MainProductId, utils.Str2Int64(vendorStoreID))
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
if storeSku.VendorSkuID == "" {
|
||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
||||
// 线上本地都存在,但是线上审核不成功,就去更新主商品
|
||||
if mainOrderDetail.CheckStatus != tiktokShop.SkuCheckStatusPass && mainOrderDetail.CheckStatus != tiktokShop.SkuCheckStatusPassNotPutOn {
|
||||
// 更新主商品,在同步到子门店,考虑审核时间
|
||||
updateParam := &product_editV2_request.ProductEditV2Param{
|
||||
PayType: tiktokShop.TiktokPayType1,
|
||||
ReduceType: tiktokShop.SkuReduceTypePayMakeOrder,
|
||||
Weight: utils.Int2Float64(storeSku.Weight),
|
||||
DeliveryDelayDay: tiktokShop.DeliveryDelayDayToDay,
|
||||
PresellType: tiktokShop.SendGoodsTypeNow,
|
||||
Supply7dayReturn: 0,
|
||||
Mobile: storeDetail.Tel1,
|
||||
Commit: true,
|
||||
Specs: "重量|" + utils.Float64ToStr(float64(storeSku.SpecQuality)) + storeSku.SpecUnit,
|
||||
NeedRechargeMode: false,
|
||||
SellChannel: []int64{0},
|
||||
StartSaleType: 0,
|
||||
PickupMethod: "0",
|
||||
CategoryLeafId: param.CategoryLeafId,
|
||||
Name: param.Name,
|
||||
ProductFormatNew: param.ProductFormatNew,
|
||||
}
|
||||
updateParam.Pic = img
|
||||
updateParam.Description = detailImg
|
||||
updateParam.WeightUnit = tiktokShop.WeightUint_G
|
||||
updateParam.StandardBrandId = param.StandardBrandId // 默认品牌京西菜市
|
||||
updateParam.ProductId = mainOrderDetail.MainProductId
|
||||
updateParam.MainProductId = mainOrderDetail.MainProductId
|
||||
updateParam.SpecPrices = param.SpecPrices
|
||||
//updateParam.StoreId = utils.Str2Int64(vendorStoreID)
|
||||
if err := api.EditStoreCommodity(updateParam); err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
||||
} else {
|
||||
localThing[0].UpdatedAt = time.Now()
|
||||
localThing[0].SyncStatus = 0
|
||||
localThing[0].ThingType = model.ThingTypeSku
|
||||
dao.UpdateThingMap(localThing[0])
|
||||
}
|
||||
continue
|
||||
}
|
||||
continue
|
||||
|
||||
// 主商品存在,直接同步子商品
|
||||
childrenProductId, err := api.CreateSubProduct(utils.Str2Int64(localThing[0].VendorThingID), utils.Str2Int64(vendorStoreID))
|
||||
if err != nil || childrenProductId == 0 {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
storeSku.SkuSyncStatus = model.SyncFlagStoreSkuModifiedMask
|
||||
storeSku.VendorSonSkuID = utils.Int64ToStr(childrenProductId) // (属性id skuID方案一)(自商品的商品id方案二)
|
||||
storeSku.VendorSkuID = utils.Int64ToStr(childrenProductId) // 子商品主id
|
||||
storeSku.VendorMainId = localThing[0].VendorThingID // 商品主id
|
||||
continue
|
||||
}
|
||||
|
||||
// 同步价格,库存,上架
|
||||
failedList = upDateChildrenPriceStockLaunch(api, storeSku, childrenProductId, vendorStoreID, syncType)
|
||||
storeSku.VendorSonSkuID = utils.Int64ToStr(childrenProductId) // (属性id skuID方案一)(自商品的商品id方案二)
|
||||
storeSku.VendorSkuID = utils.Int64ToStr(childrenProductId) // 子商品主id
|
||||
storeSku.VendorMainId = localThing[0].VendorThingID // 商品主id
|
||||
}
|
||||
storeSku.VendorSonSkuID = utils.Int64ToStr(childrenProductId) // 属性id skuID(自商品的商品id)
|
||||
storeSku.VendorSkuID = utils.Int64ToStr(childrenProductId) // 子商品主id
|
||||
storeSku.VendorMainId = utils.Int64ToStr(tiktokResultProductId) // 商品主id
|
||||
//param.MainProductId = tiktokResultProductId
|
||||
//param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, tiktokResultProductId, storeSku)
|
||||
//
|
||||
//param.StoreId = utils.Str2Int64(vendorStoreID)
|
||||
//// 抖店创建子商品
|
||||
//tiktokResultChildren, err := api.CreateStoreCommodity(param)
|
||||
//if err != nil {
|
||||
// failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
// if storeSku.VendorSkuID == "" {
|
||||
// storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
||||
// }
|
||||
// continue
|
||||
//}
|
||||
//var attrId2 []string
|
||||
//for _, v := range tiktokResultChildren.Sku {
|
||||
// attrId2 = append(attrId2, utils.Int64ToStr(v.SkuId))
|
||||
//}
|
||||
//storeSku.VendorSonSkuID = strings.Join(attrId2, ",") // 属性id skuID(子商品的属性id)
|
||||
//storeSku.VendorSkuID = utils.Int64ToStr(tiktokResultChildren.ProductId) // 子商品主id
|
||||
//storeSku.VendorMainId = utils.Int64ToStr(tiktokResultProductId) // 商品主id
|
||||
}
|
||||
} else {
|
||||
syncType = "更新商品"
|
||||
for _, storeSku := range storeSkuList {
|
||||
if storeSku.StoreSkuStatus != 1 { // 未可售的商品不参与修改
|
||||
if storeSku.StoreSkuStatus != model.YES { // 未可售的商品不参与修改
|
||||
continue
|
||||
}
|
||||
// 更新商品(目前只更新子商品,主商品暂不支持)
|
||||
|
||||
// 更新主商品,在同步到子门店,考虑审核时间
|
||||
param := &product_editV2_request.ProductEditV2Param{
|
||||
Name: utils.LimitUTF8StringLen(storeSku.SkuName, 90),
|
||||
PayType: tiktokShop.TiktokPayType1,
|
||||
@@ -367,15 +360,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
} else {
|
||||
param.CategoryLeafId = storeSku.VendorVendorCatID
|
||||
}
|
||||
|
||||
if len(param.Name) < 23 { // 中文字符一个汉字三个长度符号/数字/字母两个长度,商品名称不能大于
|
||||
param.Name += utils.Float64ToStr(float64(storeSku.SpecQuality)) + "/" + storeSku.SpecUnit
|
||||
if len(param.Name) < 23 {
|
||||
param.Name += "【惊喜到家】"
|
||||
}
|
||||
} else if len(param.Name) > 90 { // 抖音最大60个字符,三十个汉字
|
||||
param.Name = param.Name[0:90]
|
||||
}
|
||||
param.Name = checkNameLenght(param.Name)
|
||||
|
||||
// 获取上传图,商品轮播图
|
||||
img, detailImg, err := GetTiktokImgList(api, utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.DescImg, storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5)
|
||||
@@ -385,16 +370,8 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
}
|
||||
param.Pic = img
|
||||
param.Description = detailImg
|
||||
|
||||
// weight_unit 目前抖音只支持g和kg两种
|
||||
//switch storeSku.Unit {
|
||||
//case "g", "ml", "G", "ML":
|
||||
param.WeightUnit = tiktokShop.WeightUint_G
|
||||
//case "kg", "l", "L", "KG":
|
||||
// param.WeightUnit = tiktokShop.WeightUint_G
|
||||
//}
|
||||
|
||||
//param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, 0, storeSku)
|
||||
// 获取商品的属性
|
||||
if storeSku.TiktokAttribute == "" || storeSku.TiktokAttribute == "{}" {
|
||||
param.ProductFormatNew, err = MakeProductFormatNew(api, int64(storeSku.NameID), param.CategoryLeafId)
|
||||
@@ -405,66 +382,240 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
} else {
|
||||
param.ProductFormatNew = storeSku.TiktokAttribute
|
||||
}
|
||||
|
||||
// 获取品牌
|
||||
param.StandardBrandId = 789194134 // 默认品牌京西菜市
|
||||
|
||||
//tiktokResult, err := api.EditStoreCommodity(param) // 创建主商品
|
||||
//if err != nil {
|
||||
// failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
// storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
||||
// continue
|
||||
//}
|
||||
var mainIdInt int64
|
||||
if storeSku.VendorMainId == "" {
|
||||
localThing, _ := dao.GetThingToTiktokMapList(db, model.VendorIDDD, int64(storeSku.SkuID), storeDetail.VendorOrgCode)
|
||||
if len(localThing) == 0 || localThing == nil {
|
||||
mainOrderDetail, err := api.GetSkuDetailLocalID("", utils.Int2Str(storeSku.SkuID))
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
continue
|
||||
}
|
||||
storeSku.VendorMainId = mainOrderDetail.ProductIdStr
|
||||
mainIdInt = mainOrderDetail.MainProductId
|
||||
if err := dao.CreateThingMap(int64(storeSku.SkuID), mainOrderDetail.ProductIdStr, storeDetail.VendorOrgCode, storeSku.VendorSkuAttrId, model.ThingTypeSku, 0); err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
}
|
||||
} else {
|
||||
storeSku.VendorMainId = localThing[0].VendorThingID
|
||||
mainIdInt = utils.Str2Int64(localThing[0].VendorThingID)
|
||||
}
|
||||
} else {
|
||||
mainIdInt = utils.Str2Int64(storeSku.VendorMainId)
|
||||
}
|
||||
|
||||
// 修改商品
|
||||
//param.FreightId = freightId
|
||||
param.ProductId = utils.Str2Int64(storeSku.VendorMainId)
|
||||
param.MainProductId = utils.Str2Int64(storeSku.VendorMainId)
|
||||
param.ProductId = mainIdInt
|
||||
param.MainProductId = mainIdInt
|
||||
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, param.MainProductId, storeSku)
|
||||
param.ProductId = utils.Str2Int64(storeSku.VendorSkuID)
|
||||
param.StoreId = utils.Str2Int64(vendorStoreID)
|
||||
//param.StoreId = utils.Str2Int64(vendorStoreID)
|
||||
if err := api.EditStoreCommodity(param); err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
||||
continue
|
||||
}
|
||||
|
||||
// 门店商品同步,先删除同步商品,在重新分配该商品
|
||||
if _, err := api.BatchRedistributeStoreProduct(&superm_product_batchRedistributeStoreProduct_request.TaskParams{
|
||||
MainProductId: param.MainProductId,
|
||||
AddStoreIds: nil,
|
||||
DelStoreIds: []int64{param.StoreId},
|
||||
}); err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
||||
continue
|
||||
}
|
||||
|
||||
if _, err := api.BatchRedistributeStoreProduct(&superm_product_batchRedistributeStoreProduct_request.TaskParams{
|
||||
MainProductId: param.MainProductId,
|
||||
AddStoreIds: []int64{param.StoreId},
|
||||
DelStoreIds: nil,
|
||||
}); err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
||||
continue
|
||||
}
|
||||
//if err := api.EditStoreCommodity(param); err != nil {
|
||||
// failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
// storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
||||
// continue
|
||||
//}
|
||||
|
||||
storeSku.StoreSkuStatus = 57 // 品库修改 售卖状态待同步 价格待同步
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if len(failedList) > 0 {
|
||||
err = nil
|
||||
}
|
||||
return failedList, err
|
||||
}
|
||||
|
||||
func checkNameLenght(name string) string {
|
||||
var chinesLen int // 中文
|
||||
var punctZh int // 中文标点
|
||||
var punctEn int // 英文标点
|
||||
var punctAZ int // 字母
|
||||
var punctNum int // 字母
|
||||
var spance int // 空格
|
||||
for _, v := range name {
|
||||
if unicode.Is(unicode.Han, v) { // 中文
|
||||
chinesLen++
|
||||
continue
|
||||
}
|
||||
if unicode.IsPunct(v) {
|
||||
if v >= 1000 { // 中文字符
|
||||
fmt.Println(v)
|
||||
punctZh++
|
||||
} else {
|
||||
punctEn++ // 英文字符
|
||||
}
|
||||
continue
|
||||
}
|
||||
if unicode.IsLetter(v) { // 字母
|
||||
punctAZ++
|
||||
continue
|
||||
}
|
||||
if unicode.IsNumber(v) { // 数字
|
||||
punctNum++
|
||||
continue
|
||||
}
|
||||
if unicode.IsSpace(v) { // 空格
|
||||
spance++
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
maxLen := (chinesLen * 2) + (punctZh * 2) + punctEn + punctAZ + punctNum + spance
|
||||
if maxLen > 60 { // 美团最多支持30个汉字长度
|
||||
index := strings.LastIndex(name, " ")
|
||||
if index != 0 {
|
||||
return name[0:index]
|
||||
} else {
|
||||
return name[0 : len(name)-(maxLen-60)*3]
|
||||
}
|
||||
} else if maxLen < 16 {
|
||||
name += "【同城配送】"
|
||||
return name
|
||||
}
|
||||
return name
|
||||
}
|
||||
func upDateChildrenPriceStockLaunch(api *tiktokShop.API, storeSku *dao.StoreSkuSyncInfo, childrenProductId int64, vendorStoreID, syncType string) (failedList []*partner.StoreSkuInfoWithErr) {
|
||||
skuId, failed := getProductSkuID(api, storeSku, syncType, childrenProductId)
|
||||
if skuId == 0 || len(failed) > 0 {
|
||||
return failed
|
||||
}
|
||||
// 同步价格
|
||||
if err := api.EditPrice(&sku_editPrice_request.SkuEditPriceParam{
|
||||
SkuId: skuId,
|
||||
Price: storeSku.VendorPrice,
|
||||
ProductId: childrenProductId,
|
||||
}); err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeSku.StoreID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
}
|
||||
// 同步库存
|
||||
paramStock := &sku_syncStock_request.SkuSyncStockParam{
|
||||
SkuId: skuId,
|
||||
ProductId: childrenProductId,
|
||||
Incremental: false,
|
||||
IdempotentId: "",
|
||||
StockNum: int64(storeSku.Stock),
|
||||
OutWarehouseId: vendorStoreID,
|
||||
}
|
||||
if paramStock.StockNum == 0 {
|
||||
paramStock.StockNum = 99999
|
||||
}
|
||||
if err := api.UpdateSkuStock(paramStock); err != nil {
|
||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(storeSku, err, storeSku.StoreID, model.VendorChineseNames[model.VendorIDDD], fmt.Sprintf("子商品添加固定库存.%s", err.Error()))...)
|
||||
}
|
||||
// 上架
|
||||
if err := api.LaunchProduct(childrenProductId); err != nil {
|
||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(storeSku, err, storeSku.StoreID, model.VendorChineseNames[model.VendorIDDD], fmt.Sprintf("上架子商品异常.%s", err.Error()))...)
|
||||
}
|
||||
if len(failedList) > 0 {
|
||||
storeSku.SkuSyncStatus = model.SyncFlagStoreSkuModifiedMask
|
||||
} else {
|
||||
storeSku.SkuSyncStatus = 0
|
||||
}
|
||||
return failedList
|
||||
}
|
||||
|
||||
// 查询商品详情,获取商品的抖音skuId
|
||||
func getProductSkuID(api *tiktokShop.API, storeSku *dao.StoreSkuSyncInfo, syncType string, productId int64) (childrenSkuId int64, failedList []*partner.StoreSkuInfoWithErr) {
|
||||
if storeSku.VendorSonSkuID != "" && storeSku.VendorSonSkuID != storeSku.VendorSkuID {
|
||||
return utils.Str2Int64(storeSku.VendorSonSkuID), nil
|
||||
}
|
||||
childrenDetail, err := api.GetSkuDetail(utils.Int64ToStr(productId), "")
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeSku.StoreID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
}
|
||||
|
||||
for _, v := range childrenDetail.SpecPrices {
|
||||
childrenSkuId = v.SkuId
|
||||
storeSku.VendorSonSkuID = utils.Int64ToStr(childrenSkuId)
|
||||
return childrenSkuId, nil
|
||||
}
|
||||
return 0, putils.GetErrMsg2FailedSingleList(storeSku, fmt.Errorf("获取商品抖音skuId失败[%d]", productId), storeSku.StoreID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
}
|
||||
|
||||
func getProductSkuId4UpdateStock(api *tiktokShop.API, skuInfo *partner.StoreSkuInfo, storeId int) (tiktokSkuId int64, failedList []*partner.StoreSkuInfoWithErr) {
|
||||
if skuInfo.VendorSonSkuID != "" && skuInfo.VendorSonSkuID != skuInfo.VendorSkuID && len(skuInfo.VendorSonSkuID) >= len("3589393056912261100") { // 抖音长度
|
||||
return utils.Str2Int64(skuInfo.VendorSonSkuID), nil
|
||||
}
|
||||
|
||||
var childrenSku *product_detail_response.ProductDetailData
|
||||
var err error
|
||||
if len(skuInfo.VendorSkuID) >= len("3589393056912261100") {
|
||||
childrenSku, err = api.GetSkuDetail(skuInfo.VendorSkuID, "")
|
||||
if err != nil || len(childrenSku.SpecPrices) <= 0 {
|
||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(skuInfo, err, storeId, model.VendorChineseNames[model.VendorIDDD], "修改库存[err为空,子商品skuId未获取到]")...)
|
||||
return 0, failedList
|
||||
}
|
||||
} else {
|
||||
childrenSku, err = api.GetSkuDetailLocalID("", skuInfo.VendorSkuID)
|
||||
if err != nil || len(childrenSku.SpecPrices) <= 0 {
|
||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(skuInfo, err, storeId, model.VendorChineseNames[model.VendorIDDD], "修改库存[err为空,子商品skuId未获取到]")...)
|
||||
return 0, failedList
|
||||
}
|
||||
}
|
||||
|
||||
globals.SugarLogger.Debugf("=GetSkuDetail By childrenSku %s", utils.Format4Output(childrenSku, false))
|
||||
for _, v := range childrenSku.SpecPrices {
|
||||
tiktokSkuId = v.SkuId
|
||||
skuInfo.VendorSonSkuID = utils.Int64ToStr(v.SkuId)
|
||||
skuInfo.VendorSkuID = childrenSku.ProductIdStr
|
||||
return tiktokSkuId, nil
|
||||
}
|
||||
|
||||
return 0, append(failedList, putils.GetErrMsg2FailedSingleList(skuInfo, nil, storeId, model.VendorChineseNames[model.VendorIDDD], "修改库存,获取商品详情SkuId未获取到")...)
|
||||
}
|
||||
|
||||
func getFreightIdAndSaleLimitId(api *tiktokShop.API, db *dao.DaoDB, storeDetail *dao.StoreDetail, vendorStoreID string) (freightId, saleLimitId int64, err error) {
|
||||
temp, err := dao.QueryStoreBindInfo(storeDetail.Store.ID)
|
||||
if err != nil || temp == nil || temp.ID == 0 {
|
||||
// 运费模板
|
||||
freightId, err = GetDeliveryTemp(api, vendorStoreID, storeDetail)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
// 获取门店限售模板
|
||||
saleLimitId, err = CreateSaleTemp(utils.Str2Int64(vendorStoreID), api)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
// 保存数据库
|
||||
freightTemplate := &model.FreightTemplate{
|
||||
StoreID: storeDetail.Store.ID,
|
||||
VendorStoreID: storeDetail.VendorStoreID,
|
||||
TemplateID: freightId,
|
||||
WarehouseID: 0,
|
||||
FenceID: "",
|
||||
TradeLimitID: saleLimitId,
|
||||
}
|
||||
err = dao.CreateEntity(db, freightTemplate)
|
||||
} else {
|
||||
if temp.TemplateID != 0 {
|
||||
freightId = temp.TemplateID
|
||||
} else {
|
||||
// 运费模板
|
||||
freightId, err = GetDeliveryTemp(api, vendorStoreID, storeDetail)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
temp.TemplateID = freightId
|
||||
_, err = dao.UpdateEntity(db, temp, "TemplateID")
|
||||
dao.FreightTemplateMap[temp.StoreID] = temp
|
||||
}
|
||||
|
||||
if temp.TradeLimitID != 0 {
|
||||
saleLimitId = temp.TradeLimitID
|
||||
} else {
|
||||
// 获取门店限售模板
|
||||
saleLimitId, err = CreateSaleTemp(utils.Str2Int64(vendorStoreID), api)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
temp.TradeLimitID = saleLimitId
|
||||
_, err = dao.UpdateEntity(db, temp, "TradeLimitID")
|
||||
dao.FreightTemplateMap[temp.StoreID] = temp
|
||||
}
|
||||
}
|
||||
|
||||
return freightId, saleLimitId, nil
|
||||
}
|
||||
|
||||
// CreateSaleTemp 创建限售模板
|
||||
func CreateSaleTemp(storeId int64, api *tiktokShop.API) (int64, error) {
|
||||
// 获取限售模板
|
||||
@@ -712,7 +863,7 @@ func GetSpecPrices(specs, storeId string, mainSkuId int64, localSku *dao.StoreSk
|
||||
}
|
||||
stock := localSku.Stock
|
||||
if localSku.Stock == 0 {
|
||||
stock = 9999
|
||||
stock = 99999
|
||||
}
|
||||
sku.StockNum = stock
|
||||
sku.SkuType = 1
|
||||
@@ -738,7 +889,7 @@ func GetSpecPrices(specs, storeId string, mainSkuId int64, localSku *dao.StoreSk
|
||||
}
|
||||
stock := localSku.Stock
|
||||
if localSku.Stock == 0 {
|
||||
stock = 9999
|
||||
stock = 99999
|
||||
}
|
||||
sku.StockNum = stock
|
||||
sku.SkuType = 1
|
||||
@@ -768,7 +919,7 @@ func GetSpecPrices(specs, storeId string, mainSkuId int64, localSku *dao.StoreSk
|
||||
}
|
||||
stock := localSku.Stock
|
||||
if localSku.Stock == 0 {
|
||||
stock = 9999
|
||||
stock = 99999
|
||||
}
|
||||
sku.StockNum = stock
|
||||
sku.SkuType = 1
|
||||
|
||||
@@ -1544,7 +1544,7 @@ func (c *StoreController) CreateFreeShipTemplates() {
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 打印机获取授权账号再京西菜市的绑定关系
|
||||
// @Title 打印机获取授权账号再京西菜市的绑定关系(其实就是根据平台门店id获取绑定门店id)
|
||||
// @Description 打印机获取授权账号再京西菜市的绑定关系
|
||||
// @Param token header string true "认证token"
|
||||
// @Param vendorStoreId formData string true "平台账号id"
|
||||
@@ -1558,3 +1558,20 @@ func (c *StoreController) PrintCheckAccountAuthorization() {
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 门店存在时,绑定打印机账号信息
|
||||
// @Description 门店存在时,绑定打印机账号信息
|
||||
// @Param token header string true "认证token"
|
||||
// @Param storeId formData int64 true "京西门店id"
|
||||
// @Param printSn formData string true "打印机编号"
|
||||
// @Param printKey formData string true "打印机秘钥"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /BindJxPrinter [post]
|
||||
func (c *StoreController) BindJxPrinter() {
|
||||
c.callBindJxPrinter(func(params *tStoreBindJxPrinterParams) (interface{}, string, error) {
|
||||
err := cms.BindJxPrintToStore(int64(params.StoreId), params.PrintSn, params.PrintKey)
|
||||
return nil, "", err
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
@@ -149,18 +149,20 @@ func (c *LogisticsController) LogisticsQuery() {
|
||||
Message: "运单账号不存在",
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 查询订单的运单是否存在
|
||||
data, err := dao.GetWayBillsByWayBillId(dao.GetDB(), param.TrackNo)
|
||||
if err != nil || len(data) == 0 {
|
||||
globals.SugarLogger.Debugf("根据单号查询运单数据错误:%s", err)
|
||||
globals.SugarLogger.Debugf("根据单号查询运单数据错误:%s,运单号 :%s", err.Error(), param.TrackNo)
|
||||
c.Data["json"] = LogisticsQueryRest{
|
||||
Result: false,
|
||||
ReturnCode: "1002",
|
||||
Message: "运单账号不存在",
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
returnParam := &LogisticsQueryRest{
|
||||
|
||||
@@ -3000,6 +3000,16 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
// 绑定京西打印机到京西菜市
|
||||
web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
||||
web.ControllerComments{
|
||||
Method: "BindJxPrinter",
|
||||
Router: `/BindJxPrinter`,
|
||||
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.ControllerComments{
|
||||
Method: "BackUpStoreSkuBind",
|
||||
|
||||
Reference in New Issue
Block a user