Merge remote-tracking branch 'origin/mark'
This commit is contained in:
@@ -377,27 +377,33 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao.
|
||||
//TODO 重复购买有活动且结算价大于0的商品需要拆分,第一个商品按结算价,后面的商品按shopprice 或者 saleprice, 2020-05-06
|
||||
//TODO 京东美团的订单,做活动的商品之前就会拆分出来,所以只做更新,饿百暂时不管, 2020-05-07
|
||||
//TODO 不根据商品是否拆分,直接根据该商品做了活动,并且他的vendorPrice 和 salePrice 相等,就按新规则结算, 2020-05-11
|
||||
//TODO 现在不判断商品做没做活动,只要vendorPrice和salePrice不等,就默认为做了活动,不做活动的商品就按新规则结算,2020-05-18
|
||||
if order.VendorID == model.VendorIDJD || order.VendorID == model.VendorIDMTWM {
|
||||
for _, v := range orderSkus {
|
||||
if v.EarningPrice > 0 {
|
||||
var storeID int
|
||||
if order.StoreID == 0 {
|
||||
storeID = order.JxStoreID
|
||||
} else {
|
||||
storeID = order.StoreID
|
||||
}
|
||||
result, err := dao.GetEffectiveActStoreSkuInfo2(db, 0, []int{order.VendorID}, []int{model.ActSkuSecKill, model.ActSkuDirectDown}, []int{storeID}, []int{v.SkuID}, order.OrderCreatedAt, order.OrderCreatedAt)
|
||||
if (len(result) > 0 && err == nil) || v.IsVendorAct == model.YES {
|
||||
if v.VendorPrice == v.SalePrice {
|
||||
var earningPrice = 0
|
||||
if v.ShopPrice < v.SalePrice {
|
||||
earningPrice = int(utils.Float64TwoInt64(math.Round(utils.Int2Float64(int(v.ShopPrice)) * utils.Int2Float64(storePayPercentage) / 100)))
|
||||
} else {
|
||||
// var storeID int
|
||||
// if order.StoreID == 0 {
|
||||
// storeID = order.JxStoreID
|
||||
// } else {
|
||||
// storeID = order.StoreID
|
||||
// }
|
||||
// result, err := dao.GetEffectiveActStoreSkuInfo2(db, 0, []int{order.VendorID}, []int{model.ActSkuSecKill, model.ActSkuDirectDown}, []int{storeID}, []int{v.SkuID}, order.OrderCreatedAt, order.OrderCreatedAt)
|
||||
// if (len(result) > 0 && err == nil) || v.IsVendorAct == model.YES {
|
||||
if v.VendorPrice == v.SalePrice {
|
||||
var earningPrice = 0
|
||||
if v.ShopPrice < v.SalePrice {
|
||||
if v.ShopPrice == 0 {
|
||||
earningPrice = int(utils.Float64TwoInt64(math.Round(utils.Int2Float64(int(v.SalePrice)) * utils.Int2Float64(storePayPercentage) / 100)))
|
||||
} else {
|
||||
earningPrice = int(utils.Float64TwoInt64(math.Round(utils.Int2Float64(int(v.ShopPrice)) * utils.Int2Float64(storePayPercentage) / 100)))
|
||||
}
|
||||
v.EarningPrice = int64(earningPrice)
|
||||
} else {
|
||||
earningPrice = int(utils.Float64TwoInt64(math.Round(utils.Int2Float64(int(v.SalePrice)) * utils.Int2Float64(storePayPercentage) / 100)))
|
||||
}
|
||||
v.EarningPrice = int64(earningPrice)
|
||||
// v.StoreSubID = 0
|
||||
}
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -422,6 +428,9 @@ func updateSingleOrderEarningPrice(order *model.GoodsOrder, db *dao.DaoDB) {
|
||||
}
|
||||
}
|
||||
if len(skuIDMap) > 0 {
|
||||
if order.VendorOrderID == "5000356075877900459" {
|
||||
fmt.Println("testupdateSingleOrderEarningPrice", order.VendorOrderID)
|
||||
}
|
||||
actStoreSkuList, err := dao.GetEffectiveActStoreSkuInfo(db, 0, []int{order.VendorID}, model.ActTypeAll, []int{jxStoreID}, jxutils.IntMap2List(skuIDMap), order.OrderCreatedAt, order.OrderCreatedAt)
|
||||
if err != nil {
|
||||
globals.SugarLogger.Errorf("updateOrderSkuOtherInfo can not get sku promotion info for error:%v", err)
|
||||
@@ -738,7 +747,6 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context,
|
||||
task := tasksch.NewParallelTask("刷新历史订单结算价", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
order := batchItemList[0].(*model.GoodsOrder)
|
||||
fmt.Println("test333333333333333333333333333333", order.VendorOrderID)
|
||||
db := dao.GetDB()
|
||||
updateSingleOrderEarningPrice(order, db)
|
||||
dao.Begin(db)
|
||||
@@ -785,7 +793,20 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context,
|
||||
}
|
||||
}
|
||||
jxutils.RefreshOrderSkuRelated(order)
|
||||
num, err := dao.UpdateEntity(db, order, "EarningPrice")
|
||||
storeID := 0
|
||||
if order.StoreID == 0 {
|
||||
storeID = order.JxStoreID
|
||||
} else {
|
||||
storeID = order.StoreID
|
||||
}
|
||||
store, _ := dao.GetStoreDetail(db, storeID, order.VendorID)
|
||||
payPercentage := store.PayPercentage
|
||||
if payPercentage <= 50 {
|
||||
order.NewEarningPrice = order.TotalShopMoney * int64((100 - payPercentage/2)) / 100
|
||||
} else {
|
||||
order.NewEarningPrice = order.EarningPrice
|
||||
}
|
||||
num, err := dao.UpdateEntity(db, order, "EarningPrice", "NewEarningPrice")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -946,3 +967,31 @@ func RefreshOrdersPriceInfo(ctx *jxcontext.Context, fromTime, toTime time.Time,
|
||||
}
|
||||
return hint, err
|
||||
}
|
||||
|
||||
type GetOrderSimpleInfoResult struct {
|
||||
VendorOrderID string `orm:"column(vendor_order_id)" json:"vendorOrderID"`
|
||||
Status int `json:"status"`
|
||||
WaybillVendorID int `orm:"column(waybill_vendor_id)" json:"waybillVendorID"`
|
||||
CourierName string `json:"courierName"`
|
||||
CourierMobile string `json:"courierMobile"`
|
||||
Tel1 string `json:"tel1"`
|
||||
MarketManPhone string `json:"marketManPhone"`
|
||||
}
|
||||
|
||||
func GetOrderSimpleInfo(ctx *jxcontext.Context, vendorOrderID string) (getOrderSimpleInfoResult *GetOrderSimpleInfoResult, err error) {
|
||||
db := dao.GetDB()
|
||||
sql := `
|
||||
SELECT a.vendor_order_id, a.status, a.waybill_vendor_id, c.courier_name, c.courier_mobile, b.tel1, b.market_man_phone
|
||||
FROM goods_order a
|
||||
JOIN store b ON IF(a.store_id <> '', a.store_id, a.jx_store_id) = b.id
|
||||
LEFT JOIN waybill c ON c.vendor_order_id = a.vendor_order_id
|
||||
WHERE a.vendor_order_id = ?
|
||||
`
|
||||
sqlParams := []interface{}{vendorOrderID}
|
||||
err = dao.GetRow(db, &getOrderSimpleInfoResult, sql, sqlParams)
|
||||
if getOrderSimpleInfoResult == nil {
|
||||
return getOrderSimpleInfoResult, fmt.Errorf("未查询到该订单的信息!")
|
||||
}
|
||||
|
||||
return getOrderSimpleInfoResult, err
|
||||
}
|
||||
|
||||
@@ -1367,3 +1367,27 @@ func RefreshJdShopOrdersEarningPrice(ctx *jxcontext.Context, orderStartTime, ord
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func GetOrderUserBuyFirst(ctx *jxcontext.Context, vendorOrderID string) (isFirst bool, err error) {
|
||||
var orderPays []*model.OrderPay
|
||||
sql := `
|
||||
SELECT b.*
|
||||
FROM goods_order a, order_pay b
|
||||
WHERE a.vendor_order_id = b.vendor_order_id
|
||||
AND a.vendor_id = b.vendor_id
|
||||
AND b.pay_finished_at <> 0
|
||||
AND a.vendor_id = ?
|
||||
AND a.user_id = (
|
||||
SELECT user_id
|
||||
FROM goods_order WHERE vendor_order_id = ?)
|
||||
AND a.vendor_order_id <> ?
|
||||
`
|
||||
sqlParams := []interface{}{model.VendorIDJX, vendorOrderID, vendorOrderID}
|
||||
err = dao.GetRows(dao.GetDB(), &orderPays, sql, sqlParams)
|
||||
if len(orderPays) > 0 {
|
||||
return false, err
|
||||
} else {
|
||||
return true, err
|
||||
}
|
||||
return isFirst, err
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ func (c *BaseScheduler) CreateWaybillOnProviders(ctx *jxcontext.Context, order *
|
||||
stores, _ := dao.GetStoreList(dao.GetDB(), []int{order.StoreID}, nil, nil, nil, "")
|
||||
if len(stores) > 0 {
|
||||
if stores[0].PayPercentage <= 50 {
|
||||
order.NewEarningPrice = (order.TotalShopMoney - bill.DesiredFee) * int64((100 - stores[0].PayPercentage/2)) / 10000
|
||||
order.NewEarningPrice = (order.TotalShopMoney - bill.DesiredFee) * int64((100 - stores[0].PayPercentage/2)) / 100
|
||||
dao.UpdateEntity(dao.GetDB(), order, "NewEarningPrice")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -516,6 +516,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
||||
s.resetTimer(savedOrderInfo, bill, isPending)
|
||||
s.saveDeliveryFeeFromAndStartWatch(savedOrderInfo, bill.StatusTime)
|
||||
}
|
||||
s.sendCourierOrderSMS(bill)
|
||||
} else {
|
||||
isBillExist := s.updateBillsInfo(savedOrderInfo, bill)
|
||||
if !isBillExist {
|
||||
@@ -654,6 +655,11 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *DefScheduler) sendCourierOrderSMS(bill *model.Waybill) (err error) {
|
||||
err = smsmsg.NotifyNewCourierOrder(bill)
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *DefScheduler) isWaybillCourierSame(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool {
|
||||
return savedOrderInfo.waybills[bill.WaybillVendorID] != nil && savedOrderInfo.waybills[bill.WaybillVendorID].CourierMobile == bill.CourierMobile
|
||||
}
|
||||
@@ -1352,9 +1358,15 @@ func (s *DefScheduler) notifyNewOrder(order *model.GoodsOrder) {
|
||||
utils.CallFuncAsync(func() {
|
||||
order = setFakeActualPayPrice(order)
|
||||
netprinter.PrintOrderByOrder(jxcontext.AdminCtx, order)
|
||||
weixinmsg.NotifyNewOrder(order)
|
||||
//目前暂且认为AdjustCount > 0 就是调整单
|
||||
if order.AdjustCount > 0 {
|
||||
weixinmsg.NotifyAdjustOrder(order)
|
||||
} else {
|
||||
weixinmsg.NotifyNewOrder(order)
|
||||
}
|
||||
smsmsg.NotifyNewOrder(order)
|
||||
OrderProfitWarning(order)
|
||||
smsmsg.NotifyNewUserOrder(order)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package cms
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -47,6 +48,8 @@ var (
|
||||
"mtpsPrice": true,
|
||||
}
|
||||
|
||||
regexpMsgContentOpID = regexp.MustCompile(`"openid":"(.*?)"`)
|
||||
|
||||
receiveMsgUsersMap = map[string][]string{
|
||||
SendMsgTypeOpenStoreRequest: []string{
|
||||
"石锋",
|
||||
@@ -57,6 +60,7 @@ var (
|
||||
"石锋",
|
||||
// "x",
|
||||
// "周扬",
|
||||
// "苏尹岚",
|
||||
},
|
||||
}
|
||||
needConfirmRequestMap = map[string]int{
|
||||
@@ -224,6 +228,84 @@ func SendMsg2Somebody(ctx *jxcontext.Context, mobileNum, verifyCode, msgType, ms
|
||||
}
|
||||
}
|
||||
db := dao.GetDB()
|
||||
//获取门店信息
|
||||
var (
|
||||
stores []*model.Store
|
||||
authBinds []*model.AuthBind
|
||||
order *model.GoodsOrder
|
||||
storeName string
|
||||
storeID int
|
||||
vendorOrderID string
|
||||
)
|
||||
if mobileNum != "" {
|
||||
sql := `
|
||||
SELECT * FROM store WHERE (tel1 = ? OR tel2 = ?) AND deleted_at = ?
|
||||
`
|
||||
sqlParams := []interface{}{mobileNum, mobileNum, utils.DefaultTimeValue}
|
||||
err = dao.GetRows(db, &stores, sql, sqlParams)
|
||||
if len(stores) > 0 {
|
||||
storeName = stores[0].Name
|
||||
storeID = stores[0].ID
|
||||
}
|
||||
if storeID == 0 {
|
||||
results := regexpMsgContentOpID.FindStringSubmatch(msgContent)
|
||||
if len(results) > 0 {
|
||||
sql3 := `
|
||||
SELECT * FROM auth_bind WHERE auth_id = ? OR auth_id2 = ?
|
||||
`
|
||||
sqlParams3 := []interface{}{results[1], results[1]}
|
||||
err = dao.GetRows(db, &authBinds, sql3, sqlParams3)
|
||||
if len(authBinds) > 0 {
|
||||
user, _ := dao.GetUserByID(db, "user_id", authBinds[0].UserID)
|
||||
mobileNum = *user.Mobile
|
||||
sqlParams4 := []interface{}{mobileNum, mobileNum, utils.DefaultTimeValue}
|
||||
err = dao.GetRows(db, &stores, sql, sqlParams4)
|
||||
if len(stores) > 0 {
|
||||
storeName = stores[0].Name
|
||||
storeID = stores[0].ID
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
results := regexpMsgContentOpID.FindStringSubmatch(msgContent)
|
||||
if len(results) > 0 {
|
||||
sql3 := `
|
||||
SELECT * FROM auth_bind WHERE auth_id = ? OR auth_id2 = ?
|
||||
`
|
||||
sqlParams3 := []interface{}{results[1], results[1]}
|
||||
err = dao.GetRows(db, &authBinds, sql3, sqlParams3)
|
||||
if len(authBinds) > 0 {
|
||||
user, _ := dao.GetUserByID(db, "user_id", authBinds[0].UserID)
|
||||
mobileNum = *user.Mobile
|
||||
sql4 := `
|
||||
SELECT * FROM store WHERE (tel1 = ? OR tel2 = ?) AND deleted_at = ?
|
||||
`
|
||||
sqlParams4 := []interface{}{mobileNum, mobileNum, utils.DefaultTimeValue}
|
||||
err = dao.GetRows(db, &stores, sql4, sqlParams4)
|
||||
if len(stores) > 0 {
|
||||
storeName = stores[0].Name
|
||||
storeID = stores[0].ID
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
sql2 := `
|
||||
SELECT *
|
||||
FROM goods_order
|
||||
WHERE IF(store_id <> '', store_id, jx_store_id) = ?
|
||||
ORDER BY order_created_at DESC
|
||||
LIMIT 1
|
||||
`
|
||||
sqlParams2 := []interface{}{storeID}
|
||||
err = dao.GetRow(db, &order, sql2, sqlParams2)
|
||||
if order != nil {
|
||||
vendorOrderID = order.VendorOrderID
|
||||
}
|
||||
if storeID == 0 {
|
||||
vendorOrderID = ""
|
||||
}
|
||||
msgContent = msgContent + " 门店名称:" + storeName + " 门店ID:" + utils.Int2Str(storeID) + " 最新订单号:" + vendorOrderID
|
||||
for _, v := range receiveMsgUsersMap[msgType] {
|
||||
user, err2 := dao.GetUserByID(db, "name", v)
|
||||
if err2 == nil {
|
||||
|
||||
@@ -1120,6 +1120,34 @@ func AddSku(ctx *jxcontext.Context, nameID int, sku *model.Sku, userName string)
|
||||
err = ErrEntityNotExist
|
||||
}
|
||||
}
|
||||
//增加规格则同步到门店,目前只做了京东商城的。
|
||||
storeSkus, err := dao.GetStoreSkusByNameIDs(db, []int{model.JdShopMainStoreID}, nameID)
|
||||
if len(storeSkus) > 0 {
|
||||
storeIDs := make(map[int]int)
|
||||
storeMaps, err2 := dao.GetStoresMapList(db, []int{model.VendorIDJDShop}, nil, nil, model.StoreStatusAll, model.StoreIsSyncAll, "")
|
||||
err = err2
|
||||
for _, v := range storeMaps {
|
||||
storeSkus2, err2 := dao.GetStoreSkusByNameIDs(db, []int{v.StoreID}, nameID)
|
||||
err = err2
|
||||
if len(storeSkus2) > 0 {
|
||||
storeIDs[v.StoreID] = v.StoreID
|
||||
}
|
||||
}
|
||||
skuBindInfos := []*StoreSkuBindInfo{}
|
||||
for _, v := range storeIDs {
|
||||
skus2 := []*StoreSkuBindSkuInfo{}
|
||||
skuBindInfo := &StoreSkuBindInfo{
|
||||
StoreID: v,
|
||||
}
|
||||
sku2 := &StoreSkuBindSkuInfo{
|
||||
SkuID: sku.ID,
|
||||
}
|
||||
skus2 = append(skus2, sku2)
|
||||
skuBindInfo.Skus = skus2
|
||||
skuBindInfos = append(skuBindInfos, skuBindInfo)
|
||||
}
|
||||
FocusStoreSkusBySku(ctx, skuBindInfos, true, true)
|
||||
}
|
||||
return outSkuNameExt, err
|
||||
}
|
||||
|
||||
@@ -1258,10 +1286,10 @@ func DeleteSku(ctx *jxcontext.Context, skuID int, userName string) (num int64, e
|
||||
return 0, err
|
||||
}
|
||||
dao.Commit(db)
|
||||
|
||||
if num == 1 {
|
||||
_, err = CurVendorSync.SyncSku(ctx, db, -1, sku.ID, false, false, userName)
|
||||
}
|
||||
err = deleteJdsSku(db, skuID)
|
||||
return num, err
|
||||
}
|
||||
|
||||
@@ -1293,6 +1321,7 @@ func DeleteStoreSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuID int) (n
|
||||
model.FieldJdSyncStatus: model.SyncFlagDeletedMask,
|
||||
model.FieldMtwmSyncStatus: model.SyncFlagDeletedMask,
|
||||
model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask,
|
||||
model.FieldJdsSyncStatus: model.SyncFlagDeletedMask,
|
||||
}, ctx.GetUserName(), map[string]interface{}{
|
||||
model.FieldSkuID: v.ID,
|
||||
model.FieldDeletedAt: utils.DefaultTimeValue,
|
||||
@@ -2475,3 +2504,11 @@ func getImgFromNet(db *dao.DaoDB, upc string) (img string) {
|
||||
img = result.Img
|
||||
return img
|
||||
}
|
||||
|
||||
func deleteJdsSku(db *dao.DaoDB, skuID int) (err error) {
|
||||
storeBinds, err := dao.GetStoresSkusInfo(db, []int{model.JdShopMainStoreID}, []int{skuID})
|
||||
if err == nil {
|
||||
err = api.JdShopAPI.DeleteSku(storeBinds[0].JdsID)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -645,6 +645,9 @@ func getMapCenter(storeList []*StoreExt) (lng, lat float64) {
|
||||
}
|
||||
|
||||
func GetVendorStore(ctx *jxcontext.Context, vendorID int, vendorOrgCode, vendorStoreID string) (retVal *StoreExt, err error) {
|
||||
if vendorID == model.VendorIDJDShop && vendorStoreID == model.JdShopMainVendorStoreID {
|
||||
return nil, err
|
||||
}
|
||||
if handler := CurVendorSync.GetStoreHandler(vendorID); handler != nil {
|
||||
result, err2 := handler.ReadStore(ctx, vendorOrgCode, vendorStoreID)
|
||||
if err = err2; err == nil {
|
||||
@@ -1147,7 +1150,7 @@ func AddStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, vendorID int, vend
|
||||
storeMap.Status = model.StoreStatusOpened
|
||||
storeMap.DeliveryType = model.StoreDeliveryTypeByStore
|
||||
storeMap.SyncStatus = 0
|
||||
if vendorID != model.VendorIDJX && vendorID != model.VendorIDYB {
|
||||
if vendorID != model.VendorIDJX && vendorID != model.VendorIDYB && vendorID != model.VendorIDJDShop {
|
||||
if storeMap.VendorOrgCode == "" {
|
||||
return nil, fmt.Errorf("必须指定平台分账号信息")
|
||||
}
|
||||
@@ -1171,30 +1174,64 @@ func AddStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, vendorID int, vend
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if err == nil {
|
||||
dao.WrapAddIDCULDEntity(storeMap, userName)
|
||||
if db == nil {
|
||||
db = dao.GetDB()
|
||||
}
|
||||
dao.Begin(db)
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
dao.Rollback(db)
|
||||
panic(r)
|
||||
}
|
||||
}()
|
||||
if err = dao.CreateEntity(db, storeMap); err == nil {
|
||||
if globals.IsAddEvent {
|
||||
err = AddEventDetail(db, ctx, model.OperateAdd, vendorID, model.ThingTypeStore, storeID, "", `{"VendorID":`+utils.Int2Str(vendorID)+`}`)
|
||||
}
|
||||
dao.Commit(db)
|
||||
outStoreMap = storeMap
|
||||
_, err = CurVendorSync.SyncStore(ctx, db, storeMap.VendorID, storeID, false, userName)
|
||||
} else if vendorID == model.VendorIDJDShop {
|
||||
if storeMap.VendorStoreID == "" {
|
||||
storeMap.SyncStatus = model.SyncFlagNewMask //京东商城要去建店
|
||||
} else {
|
||||
dao.Rollback(db)
|
||||
if handler := CurVendorSync.GetStoreHandler(vendorID); handler != nil {
|
||||
store, err2 := handler.ReadStore(ctx, vendorOrgCode, storeMap.VendorStoreID)
|
||||
if err = err2; err == nil || storeMap.IsSync == 0 {
|
||||
if store != nil {
|
||||
storeMap.Status = store.Status
|
||||
}
|
||||
err = nil
|
||||
storeMap.SyncStatus = model.SyncFlagModifiedMask | model.SyncFlagStoreName | model.SyncFlagStoreAddress
|
||||
} else {
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
err = ErrCanNotFindVendor
|
||||
}
|
||||
}
|
||||
}
|
||||
storeMapList, err := dao.GetStoresMapList2(db, []int{vendorID}, []int{storeID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", true)
|
||||
if len(storeMapList) > 0 {
|
||||
_, err = CurVendorSync.SyncStore(ctx, db, storeMap.VendorID, storeID, false, userName)
|
||||
} else {
|
||||
if err == nil {
|
||||
dao.WrapAddIDCULDEntity(storeMap, userName)
|
||||
if db == nil {
|
||||
db = dao.GetDB()
|
||||
}
|
||||
dao.Begin(db)
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
dao.Rollback(db)
|
||||
panic(r)
|
||||
}
|
||||
}()
|
||||
if err = dao.CreateEntity(db, storeMap); err == nil {
|
||||
dao.Commit(db)
|
||||
outStoreMap = storeMap
|
||||
_, err = CurVendorSync.SyncStore(ctx, db, storeMap.VendorID, storeID, false, userName)
|
||||
} else {
|
||||
dao.Rollback(db)
|
||||
}
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
return outStoreMap, err
|
||||
}
|
||||
if vendorID == model.VendorIDJDShop {
|
||||
//绑定京东商城后,需要对绑定的门店现有的和模板店相同且可售的商品设置京东商城的门店库存
|
||||
//TODO SyncFlagSaleMask对京东商城来说,修改门店商品状态就是修改库存
|
||||
if _, err = SetStoreSkuSyncStatus2(db, []int{storeID}, []int{model.VendorIDJDShop}, findSkusBetweenJdsMainStore(db, storeID), model.SyncFlagSaleMask); err == nil {
|
||||
// CurVendorSync.SyncStoresSkus(ctx, nil, 0, db, nil, []int{storeID}, nil, false, true, true)
|
||||
}
|
||||
}
|
||||
if globals.IsAddEvent {
|
||||
err = AddEventDetail(db, ctx, model.OperateAdd, vendorID, model.ThingTypeStore, storeID, "", `{"VendorID":`+utils.Int2Str(vendorID)+`}`)
|
||||
}
|
||||
return outStoreMap, err
|
||||
}
|
||||
|
||||
@@ -2447,7 +2484,7 @@ func SyncStoresQualify(ctx *jxcontext.Context, storeIDs []int, isAsync, isContin
|
||||
|
||||
func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64, needWalkDistance bool) (storeList []*Store4User, err error) {
|
||||
const (
|
||||
maxRadius = 5000
|
||||
maxRadius = 8000
|
||||
maxStoreCount4User = 5
|
||||
)
|
||||
|
||||
@@ -2471,7 +2508,6 @@ func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64, needWalkDi
|
||||
utils.DefaultTimeValue, model.StoreStatusDisabled, jxutils.StandardCoordinate2Int(lng1), jxutils.StandardCoordinate2Int(lng2), jxutils.StandardCoordinate2Int(lat1), jxutils.StandardCoordinate2Int(lat2),
|
||||
model.YES,
|
||||
}
|
||||
|
||||
var storeList1 []*Store4User
|
||||
if err = dao.GetRows(dao.GetDB(), &storeList1, sql, sqlParams...); err == nil {
|
||||
var storeList2 []*Store4User
|
||||
@@ -3123,3 +3159,20 @@ func DeleteStoreCategroies(ctx *jxcontext.Context, db *dao.DaoDB, storeID int) (
|
||||
err = dao.DeleteStoreCategroies(db, ctx.GetUserName(), storeID)
|
||||
return err
|
||||
}
|
||||
|
||||
func findSkusBetweenJdsMainStore(db *dao.DaoDB, storeID int) (skus []int) {
|
||||
var skuMap = make(map[int]int)
|
||||
storeSkus1, _ := dao.GetStoresSkusInfo(db, []int{model.JdShopMainStoreID}, nil)
|
||||
storeSkus2, _ := dao.GetStoresSkusInfo(db, []int{storeID}, nil)
|
||||
for _, v := range storeSkus1 {
|
||||
if v.Status == model.SkuStatusNormal {
|
||||
skuMap[v.SkuID] = 1
|
||||
}
|
||||
}
|
||||
for _, v := range storeSkus2 {
|
||||
if v.Status == model.SkuStatusNormal && skuMap[v.SkuID] != 0 {
|
||||
skus = append(skus, v.SkuID)
|
||||
}
|
||||
}
|
||||
return skus
|
||||
}
|
||||
|
||||
@@ -13,6 +13,8 @@ import (
|
||||
"time"
|
||||
"unicode"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/jdshopapi"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/globals/refutil"
|
||||
@@ -537,10 +539,10 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus, i
|
||||
t2.comment, t2.category_id sku_category_id, t2.status sku_status, t2.eclp_id,
|
||||
t4.created_at bind_created_at, t4.updated_at bind_updated_at, t4.last_operator bind_last_operator, t4.deleted_at bind_deleted_at,
|
||||
t4.sub_store_id, t4.price bind_price, IF(t4.unit_price IS NOT NULL, t4.unit_price, t1.price) unit_price, t4.status store_sku_status, t4.auto_sale_at,
|
||||
t4.ebai_id, t4.mtwm_id, t4.yb_id, CONCAT(smm.yb_store_prefix,t1.yb_name_suffix) yb_sku_name,
|
||||
t4.jd_sync_status, t4.ebai_sync_status, t4.mtwm_sync_status, t4.yb_sync_status,
|
||||
t4.jd_price, t4.ebai_price, t4.mtwm_price, t4.jx_price, t4.yb_price,
|
||||
t4.jd_lock_time, t4.ebai_lock_time, t4.mtwm_lock_time, t4.jx_lock_time, t4.yb_lock_time,
|
||||
t4.ebai_id, t4.mtwm_id, t4.yb_id, CONCAT(smm.yb_store_prefix,t1.yb_name_suffix) yb_sku_name, t4.jds_id, t4.jds_ware_id,
|
||||
t4.jd_sync_status, t4.ebai_sync_status, t4.mtwm_sync_status, t4.yb_sync_status, t4.jds_sync_status,
|
||||
t4.jd_price, t4.ebai_price, t4.mtwm_price, t4.jx_price, t4.yb_price, t4.jds_price,
|
||||
t4.jd_lock_time, t4.ebai_lock_time, t4.mtwm_lock_time, t4.jx_lock_time, t4.yb_lock_time, t4.jds_lock_time,
|
||||
t4.status_sale_begin, t4.status_sale_end,
|
||||
t6.mid_unit_price real_mid_unit_price
|
||||
` + sql
|
||||
@@ -853,7 +855,7 @@ func UpdateStoresSkus(ctx *jxcontext.Context, causeFlag int, storeIDs []int, sku
|
||||
return hint, err
|
||||
}
|
||||
|
||||
func UpdateStoresSkusByBind(ctx *jxcontext.Context, parentTask tasksch.ITask, skuBindInfos []*StoreSkuBindInfo, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||
func UpdateStoresSkusByBind(ctx *jxcontext.Context, parentTask tasksch.ITask, skuBindInfos []*StoreSkuBindInfo, isAsync, isContinueWhenError, isFos bool) (hint string, err error) {
|
||||
// if len(skuBindInfos) > maxStoreNameBind {
|
||||
// return "", fmt.Errorf("门店商品信息大于%d", maxStoreNameBind)
|
||||
// }
|
||||
@@ -892,7 +894,7 @@ func UpdateStoresSkusByBind(ctx *jxcontext.Context, parentTask tasksch.ITask, sk
|
||||
isAsync = asyncStoreSkuOpFilter(ctx, isAsync)
|
||||
if num > 0 {
|
||||
skuIDs := jxutils.IntMap2List(skuIDMap)
|
||||
hint, err = CurVendorSync.SyncStoresSkus(ctx, parentTask, 0, db, nil, storeIDs, skuIDs, false, isAsync, isContinueWhenError)
|
||||
hint, err = CurVendorSync.SyncStoresSkus(ctx, parentTask, 0, db, nil, storeIDs, skuIDs, isFos, isAsync, isContinueWhenError)
|
||||
}
|
||||
if num == 0 || !isAsync || hint == "" {
|
||||
hint = utils.Int64ToStr(num)
|
||||
@@ -1132,6 +1134,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
||||
model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask,
|
||||
model.FieldMtwmSyncStatus: model.SyncFlagDeletedMask,
|
||||
model.FieldYbSyncStatus: model.SyncFlagDeletedMask,
|
||||
model.FieldJdsSyncStatus: model.SyncFlagDeletedMask,
|
||||
}, userName, nil); err != nil {
|
||||
dao.Rollback(db)
|
||||
return nil, err
|
||||
@@ -2044,6 +2047,7 @@ func setStoreSkuBindStatus(skuBind *model.StoreSkuBind, status int8) {
|
||||
skuBind.EbaiSyncStatus |= status
|
||||
skuBind.MtwmSyncStatus |= status
|
||||
skuBind.YbSyncStatus |= status
|
||||
skuBind.JdsSyncStatus |= status
|
||||
}
|
||||
|
||||
func checkStoreExisting(db *dao.DaoDB, storeID int) (store *model.Store, err error) {
|
||||
@@ -3110,7 +3114,7 @@ func FocusStoreSkusByExcelBin(ctx *jxcontext.Context, reader io.Reader, isAsync,
|
||||
for _, v := range result1 {
|
||||
skuBindInfos = append(skuBindInfos, v.(*StoreSkuBindInfo))
|
||||
}
|
||||
UpdateStoresSkusByBind(ctx, task, skuBindInfos, true, true)
|
||||
UpdateStoresSkusByBind(ctx, task, skuBindInfos, true, true, false)
|
||||
}
|
||||
return result, err
|
||||
}
|
||||
@@ -3205,7 +3209,7 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBindInf
|
||||
for _, v := range result1 {
|
||||
skuBindInfos = append(skuBindInfos, v.(*StoreSkuBindInfo))
|
||||
}
|
||||
hint, err = UpdateStoresSkusByBind(ctx, task, skuBindInfos, isAsync, isContinueWhenError)
|
||||
hint, err = UpdateStoresSkusByBind(ctx, task, skuBindInfos, isAsync, isContinueWhenError, true)
|
||||
}
|
||||
return result, err
|
||||
}
|
||||
@@ -3301,7 +3305,7 @@ func AutoFocusStoreSkusForTopSkus(ctx *jxcontext.Context, isAsync, isContinueWhe
|
||||
for _, v := range result1 {
|
||||
skuBindInfos = append(skuBindInfos, v.(*StoreSkuBindInfo))
|
||||
}
|
||||
hint, err = UpdateStoresSkusByBind(ctx, nil, skuBindInfos, isAsync, isContinueWhenError)
|
||||
hint, err = UpdateStoresSkusByBind(ctx, nil, skuBindInfos, isAsync, isContinueWhenError, false)
|
||||
}
|
||||
return result, err
|
||||
}
|
||||
@@ -3796,7 +3800,7 @@ func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus,
|
||||
}
|
||||
}
|
||||
case 1:
|
||||
_, err = UpdateStoresSkusByBind(ctx, nil, param, isAsync, isContinueWhenError)
|
||||
_, err = UpdateStoresSkusByBind(ctx, nil, param, isAsync, isContinueWhenError, false)
|
||||
}
|
||||
return result, err
|
||||
}
|
||||
@@ -3879,7 +3883,7 @@ func RefreshJxPriceByVendor2(ctx *jxcontext.Context, storeIDs []int, vendorID in
|
||||
}
|
||||
}
|
||||
case 1:
|
||||
_, err = UpdateStoresSkusByBind(ctx, nil, param, isAsync, isContinueWhenError)
|
||||
_, err = UpdateStoresSkusByBind(ctx, nil, param, isAsync, isContinueWhenError, false)
|
||||
}
|
||||
return result, err
|
||||
}
|
||||
@@ -4131,7 +4135,7 @@ func CreateSkusAndFocusFromWx(ctx *jxcontext.Context, productInfo *jdapi.Product
|
||||
IsSale: 1,
|
||||
}
|
||||
skuBindInfos = append(skuBindInfos, skuBindInfo)
|
||||
_, err := UpdateStoresSkusByBind(ctx, nil, skuBindInfos, true, true)
|
||||
_, err := UpdateStoresSkusByBind(ctx, nil, skuBindInfos, true, true, false)
|
||||
if err != nil {
|
||||
err = nil
|
||||
}
|
||||
@@ -4424,3 +4428,17 @@ func focusC4Matters(ctx *jxcontext.Context, db *dao.DaoDB, v *model.Sku) (err er
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func RefreshJdsSkusStatus(ctx *jxcontext.Context) (err error) {
|
||||
handler := partner.GetPurchasePlatformFromVendorID(model.VendorIDJDShop).(partner.ISingleStoreStoreSkuHandler)
|
||||
remoteSkuList, err := handler.GetStoreSkusFullInfo(ctx, nil, 0, "", nil)
|
||||
for _, v := range remoteSkuList {
|
||||
if v.Status == jdshopapi.JdsSkuStatus2 {
|
||||
reason, err := api.JdShopAPI.FindOpReason(utils.Str2Int64(v.VendorNameID))
|
||||
if err == nil && reason == jdshopapi.PassReason {
|
||||
err = api.JdShopAPI.UpOrDown(utils.Str2Int64(v.VendorNameID), jdshopapi.JdsSkuStatus1)
|
||||
}
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -233,32 +233,79 @@ func (v *VendorSync) SyncStore2(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs
|
||||
loopStoreTask := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[loopMapInfo.VendorID]), tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
var resultList []interface{}
|
||||
var vendorStoreID string
|
||||
storeMap := batchItemList[0].(*model.StoreMap)
|
||||
db2 := db
|
||||
if len(loopMapInfo.StoreMapList) > 1 {
|
||||
db2 = dao.GetDB()
|
||||
}
|
||||
if err = handler.UpdateStore(db2, storeMap.StoreID, userName); err == nil {
|
||||
storeMap.SyncStatus = 0
|
||||
_, err = dao.UpdateEntity(db2, storeMap, model.FieldSyncStatus)
|
||||
resultList = append(resultList, 1)
|
||||
if model.IsSyncStatusNew(storeMap.SyncStatus) {
|
||||
if vendorStoreID, err = handler.CreateStore2(db2, storeMap.StoreID, userName); err == nil {
|
||||
resultList = append(resultList, 1)
|
||||
} else {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "创建门店")
|
||||
}
|
||||
} else if model.IsSyncStatusDelete(storeMap.SyncStatus) {
|
||||
if err = handler.DeleteStore(db2, storeMap.StoreID, userName); err == nil {
|
||||
resultList = append(resultList, 1)
|
||||
} else {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "删除门店")
|
||||
}
|
||||
} else {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "同步门店")
|
||||
if err = handler.UpdateStore(db2, storeMap.StoreID, userName); err == nil {
|
||||
resultList = append(resultList, 1)
|
||||
} else {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "更新门店")
|
||||
}
|
||||
}
|
||||
if err == nil {
|
||||
if model.IsSyncStatusNew(storeMap.SyncStatus) {
|
||||
storeMap.VendorStoreID = vendorStoreID
|
||||
storeMap.SyncStatus = 0
|
||||
_, err = dao.UpdateEntity(db, storeMap, "VendorStoreID", model.FieldSyncStatus)
|
||||
} else {
|
||||
storeMap.SyncStatus = 0
|
||||
_, err = dao.UpdateEntity(db, storeMap, model.FieldSyncStatus)
|
||||
}
|
||||
}
|
||||
return resultList, err
|
||||
}, loopMapInfo.StoreMapList)
|
||||
t.AddChild(loopStoreTask).Run()
|
||||
resultList, err = loopStoreTask.GetResult(0)
|
||||
} else {
|
||||
var resultList []interface{}
|
||||
db2 := db
|
||||
var vendorStoreID string
|
||||
storeMap := loopMapInfo.StoreMapList[0]
|
||||
if err = handler.UpdateStore(db, storeMap.StoreID, userName); err == nil {
|
||||
storeMap.SyncStatus = 0
|
||||
_, err = dao.UpdateEntity(db, storeMap, model.FieldSyncStatus)
|
||||
if model.IsSyncStatusNew(storeMap.SyncStatus) {
|
||||
if vendorStoreID, err = handler.CreateStore2(db2, storeMap.StoreID, userName); err == nil {
|
||||
resultList = append(resultList, 1)
|
||||
} else {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "创建门店")
|
||||
}
|
||||
} else if model.IsSyncStatusDelete(storeMap.SyncStatus) {
|
||||
if err = handler.DeleteStore(db2, storeMap.StoreID, userName); err == nil {
|
||||
resultList = append(resultList, 1)
|
||||
} else {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "删除门店")
|
||||
}
|
||||
} else {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "同步门店")
|
||||
if err = handler.UpdateStore(db, storeMap.StoreID, userName); err == nil {
|
||||
resultList = append(resultList, 1)
|
||||
} else {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "更新门店")
|
||||
}
|
||||
}
|
||||
if err == nil {
|
||||
resultList = []interface{}{1}
|
||||
if model.IsSyncStatusNew(storeMap.SyncStatus) {
|
||||
storeMap.VendorStoreID = vendorStoreID
|
||||
storeMap.SyncStatus = 0
|
||||
_, err = dao.UpdateEntity(db, storeMap, "VendorStoreID", model.FieldSyncStatus)
|
||||
} else {
|
||||
storeMap.SyncStatus = 0
|
||||
_, err = dao.UpdateEntity(db, storeMap, model.FieldSyncStatus)
|
||||
}
|
||||
}
|
||||
}
|
||||
err = partner.AddVendorInfo2Err(err, loopMapInfo.VendorID)
|
||||
@@ -1036,3 +1083,136 @@ func syncStoreSkusFromYb(ctx *jxcontext.Context, storeID, vendorID int, vendorSt
|
||||
hint = taskSeq.GetID()
|
||||
return hint, err
|
||||
}
|
||||
|
||||
func (v *VendorSync) SyncJdsStoresSkus(ctx *jxcontext.Context, storeIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
)
|
||||
_, hint, err = v.LoopStoresMap2(ctx, nil, db, fmt.Sprintf("同步京东商城库存商品信息:%v", storeIDs), isAsync, true, []int{model.VendorIDJDShop}, storeIDs, false,
|
||||
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
loopMapInfo := batchItemList[0].(*LoopStoreMapInfo)
|
||||
if handler := v.GetStoreHandler(loopMapInfo.VendorID); handler != nil {
|
||||
parallelCount := 5
|
||||
if model.MultiStoresVendorMap[loopMapInfo.VendorID] == 1 {
|
||||
parallelCount = 2
|
||||
}
|
||||
loopStoreTask := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[loopMapInfo.VendorID]),
|
||||
tasksch.NewParallelConfig().SetParallelCount(parallelCount).SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
storeMap := batchItemList[0].(*model.StoreMap)
|
||||
if storeMap.Status > model.StoreStatusDisabled && storeMap.StoreID != model.JdShopMainStoreID && storeMap.SyncRule != 0 {
|
||||
_, err = syncJdsStoresSkus(ctx, db, task, storeMap, isAsync, isContinueWhenError)
|
||||
}
|
||||
return nil, err
|
||||
}, loopMapInfo.StoreMapList)
|
||||
t.AddChild(loopStoreTask).Run()
|
||||
_, err = loopStoreTask.GetResult(0)
|
||||
}
|
||||
return nil, partner.AddVendorInfo2Err(err, loopMapInfo.VendorID)
|
||||
}, isContinueWhenError)
|
||||
return hint, err
|
||||
}
|
||||
|
||||
func syncJdsStoresSkus(ctx *jxcontext.Context, db *dao.DaoDB, parentTask tasksch.ITask, storeMap *model.StoreMap, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||
var (
|
||||
mainSkusMap = make(map[int]*model.StoreSkuBind)
|
||||
skusMap = make(map[int]*model.StoreSkuBind)
|
||||
updateList []*model.StoreSkuBind
|
||||
addList []*model.StoreSkuBind
|
||||
skuBindInfos1 []*StoreSkuBindInfo
|
||||
skuBindInfos2 []*StoreSkuBindInfo
|
||||
resultInterface1 []interface{}
|
||||
resultInterface2 []interface{}
|
||||
)
|
||||
storeSkusMain, err := dao.GetStoresSkusInfo(db, []int{model.JdShopMainStoreID}, nil)
|
||||
for _, v := range storeSkusMain {
|
||||
mainSkusMap[v.SkuID] = v
|
||||
}
|
||||
storeSkus, err := dao.GetStoresSkusInfo(db, []int{storeMap.StoreID}, nil)
|
||||
for _, v := range storeSkus {
|
||||
skusMap[v.SkuID] = v
|
||||
if mainSkusMap[v.SkuID] != nil && mainSkusMap[v.SkuID].Status != v.Status {
|
||||
updateList = append(updateList, mainSkusMap[v.SkuID])
|
||||
}
|
||||
}
|
||||
for k, v := range mainSkusMap {
|
||||
if skusMap[k] == nil {
|
||||
if storeMap.SyncRule == 2 {
|
||||
addList = append(addList, v)
|
||||
}
|
||||
}
|
||||
}
|
||||
// fmt.Println("updateList", utils.Format4Output(updateList, false))
|
||||
// fmt.Println("addList", utils.Format4Output(addList, false))
|
||||
task := tasksch.NewParallelTask("正在同步京东商城的库存商品", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||
func(ptTask *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
step := batchItemList[0].(int)
|
||||
switch step {
|
||||
case 0:
|
||||
if len(updateList) > 0 {
|
||||
task := tasksch.NewParallelTask("同步门店库存", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
storeBind := batchItemList[0].(*model.StoreSkuBind)
|
||||
retVal = []*StoreSkuBindInfo{buildStoreSkuBindInfo(db, storeMap.StoreID, storeBind, false)}
|
||||
return retVal, err
|
||||
}, updateList)
|
||||
tasksch.HandleTask(task, ptTask, false).Run()
|
||||
resultInterface1, err = task.GetResult(0)
|
||||
for _, v := range resultInterface1 {
|
||||
skuBindInfos1 = append(skuBindInfos1, v.(*StoreSkuBindInfo))
|
||||
}
|
||||
hint, err = UpdateStoresSkusByBind(ctx, ptTask, skuBindInfos1, isAsync, isContinueWhenError, false)
|
||||
}
|
||||
case 1:
|
||||
if len(addList) > 0 {
|
||||
task := tasksch.NewParallelTask("同步门店商品", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
storeBind := batchItemList[0].(*model.StoreSkuBind)
|
||||
retVal = []*StoreSkuBindInfo{buildStoreSkuBindInfo(db, storeMap.StoreID, storeBind, true)}
|
||||
return retVal, err
|
||||
}, addList)
|
||||
tasksch.HandleTask(task, ptTask, false).Run()
|
||||
resultInterface2, err = task.GetResult(0)
|
||||
for _, v := range resultInterface2 {
|
||||
skuBindInfos2 = append(skuBindInfos2, v.(*StoreSkuBindInfo))
|
||||
}
|
||||
hint, err = UpdateStoresSkusByBind(ctx, ptTask, skuBindInfos2, isAsync, isContinueWhenError, false)
|
||||
}
|
||||
}
|
||||
return retVal, err
|
||||
}, []int{0, 1})
|
||||
tasksch.HandleTask(task, nil, true).Run()
|
||||
if isAsync {
|
||||
hint = task.GetID()
|
||||
} else {
|
||||
_, err = task.GetResult(0)
|
||||
hint = "1"
|
||||
}
|
||||
return hint, err
|
||||
}
|
||||
|
||||
func buildStoreSkuBindInfo(db *dao.DaoDB, storeID int, storeBind *model.StoreSkuBind, isFocus bool) (skuBindInfo *StoreSkuBindInfo) {
|
||||
result, err := dao.GetSkus(db, []int{storeBind.SkuID}, nil, nil, nil, nil)
|
||||
if err != nil || len(result) == 0 {
|
||||
return nil
|
||||
}
|
||||
skus := []*StoreSkuBindSkuInfo{
|
||||
&StoreSkuBindSkuInfo{
|
||||
SkuID: storeBind.SkuID,
|
||||
},
|
||||
}
|
||||
skuBindInfo = &StoreSkuBindInfo{
|
||||
StoreID: storeID,
|
||||
NameID: result[0].NameID,
|
||||
}
|
||||
if isFocus {
|
||||
skuBindInfo.IsFocus = 1
|
||||
}
|
||||
if storeBind.Status == model.SkuStatusNormal {
|
||||
skus[0].IsSale = 1
|
||||
} else {
|
||||
skus[0].IsSale = -1
|
||||
}
|
||||
skuBindInfo.Skus = skus
|
||||
return skuBindInfo
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ func SyncStoreCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo
|
||||
storeCatMap.ID = catInfo.MapID
|
||||
var failedList []*partner.StoreSkuInfoWithErr
|
||||
if catInfo.IsExdSpec == model.YES {
|
||||
if vendorID == model.VendorIDJD || vendorID == model.VendorIDMTWM || vendorID == model.VendorIDYB {
|
||||
if vendorID != model.VendorIDEBAI {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
@@ -231,11 +231,12 @@ func storeSkuSyncInfo2Bare(inSku *dao.StoreSkuSyncInfo) (outSku *partner.StoreSk
|
||||
NameID: inSku.NameID,
|
||||
VendorNameID: inSku.VendorNameID,
|
||||
|
||||
Status: inSku.MergedStatus,
|
||||
VendorPrice: inSku.VendorPrice,
|
||||
Seq: inSku.Seq,
|
||||
JxPrice: inSku.Price,
|
||||
JxUnitPrice: inSku.UnitPrice,
|
||||
Status: inSku.MergedStatus,
|
||||
VendorPrice: inSku.VendorPrice,
|
||||
Seq: inSku.Seq,
|
||||
JxPrice: inSku.Price,
|
||||
JxUnitPrice: inSku.UnitPrice,
|
||||
VendorSkuID2: utils.Int64ToStr(inSku.JdsWareID),
|
||||
}
|
||||
if !isStoreSkuSyncNeedDelete(inSku) {
|
||||
outSku.Stock = model.MaxStoreSkuStockQty
|
||||
@@ -260,6 +261,15 @@ func getSkuBoxFee(vendorID int) (boxFee int64) {
|
||||
return boxFee
|
||||
}
|
||||
|
||||
func formalizeStoreSkuListForJds(inSkuList []*dao.StoreSkuSyncInfo) []*dao.StoreSkuSyncInfo {
|
||||
if len(inSkuList) > 0 {
|
||||
for _, skuItem := range inSkuList {
|
||||
skuItem.SkuName = jxutils.ComposeSkuNameSync2(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 0, skuItem.ExPrefix, skuItem.ExPrefixBegin, skuItem.ExPrefixEnd)
|
||||
}
|
||||
}
|
||||
return inSkuList
|
||||
}
|
||||
|
||||
func formalizeStoreSkuList(inSkuList []*dao.StoreSkuSyncInfo) []*dao.StoreSkuSyncInfo {
|
||||
if len(inSkuList) > 0 {
|
||||
boxFee := getSkuBoxFee(inSkuList[0].VendorID)
|
||||
@@ -324,18 +334,41 @@ func updateStoreSku(db *dao.DaoDB, vendorID int, storeSkuList []*dao.StoreSkuSyn
|
||||
// panic(r)
|
||||
// }
|
||||
// }()
|
||||
updateItemList := make([]*dao.KVUpdateItem, len(storeSkuList))
|
||||
for k, v := range storeSkuList {
|
||||
updateItemList[k] = sku2Update(vendorID, v, syncStatus)
|
||||
}
|
||||
num, err = dao.BatchUpdateEntityByKV(db, updateItemList)
|
||||
if vendorID == model.VendorIDYB {
|
||||
err = updateYbOhterSku(db, storeSkuList)
|
||||
if vendorID == model.VendorIDJDShop {
|
||||
if syncStatus != model.SyncFlagPriceMask && syncStatus != model.SyncFlagSaleMask {
|
||||
for _, v := range storeSkuList {
|
||||
updateItemList := make([]*dao.KVUpdateItem, len(v.StoreSkuSyncInfoJds))
|
||||
for k, vv := range v.StoreSkuSyncInfoJds {
|
||||
updateItemList[k] = sku2Update(vendorID, vv, syncStatus)
|
||||
err = updateJdsWareID(db, vv)
|
||||
}
|
||||
num, err = dao.BatchUpdateEntityByKV(db, updateItemList)
|
||||
}
|
||||
} else {
|
||||
updateItemList := make([]*dao.KVUpdateItem, len(storeSkuList))
|
||||
for k, v := range storeSkuList {
|
||||
updateItemList[k] = sku2Update(vendorID, v, syncStatus)
|
||||
}
|
||||
num, err = dao.BatchUpdateEntityByKV(db, updateItemList)
|
||||
}
|
||||
} else {
|
||||
updateItemList := make([]*dao.KVUpdateItem, len(storeSkuList))
|
||||
for k, v := range storeSkuList {
|
||||
updateItemList[k] = sku2Update(vendorID, v, syncStatus)
|
||||
}
|
||||
num, err = dao.BatchUpdateEntityByKV(db, updateItemList)
|
||||
if vendorID == model.VendorIDYB {
|
||||
err = updateYbOhterSku(db, storeSkuList)
|
||||
}
|
||||
}
|
||||
}
|
||||
return num, err
|
||||
}
|
||||
|
||||
func updateJdsWareID(db *dao.DaoDB, storeSku *dao.StoreSkuSyncInfo) (err error) {
|
||||
return dao.UpdateJdsWareID(db, storeSku)
|
||||
}
|
||||
|
||||
func updateYbOhterSku(db *dao.DaoDB, storeSkuList []*dao.StoreSkuSyncInfo) (err error) {
|
||||
for _, v := range storeSkuList {
|
||||
err = dao.UpdateYbOtherSku(db, v)
|
||||
@@ -361,7 +394,6 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
||||
} else {
|
||||
skus, err = dao.GetStoreSkus(db, vendorID, storeID, skuIDs)
|
||||
}
|
||||
|
||||
if err != nil || len(skus) == 0 {
|
||||
return err
|
||||
}
|
||||
@@ -376,6 +408,11 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
||||
skus = skus2
|
||||
}
|
||||
formalizeStoreSkuList(skus)
|
||||
//京东商城的商品名规则不同
|
||||
// name,空格,comment,约xxg
|
||||
// if vendorID == model.VendorIDJDShop {
|
||||
// formalizeStoreSkuListForJds(skus)
|
||||
// }
|
||||
|
||||
singleStoreHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler)
|
||||
storeSkuHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformStoreSkuHandler)
|
||||
@@ -394,6 +431,11 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
||||
now := jxutils.OperationTime2HourMinuteFormat(time.Now())
|
||||
var failedList []*partner.StoreSkuInfoWithErr
|
||||
for _, sku := range skus {
|
||||
if vendorID == model.VendorIDJDShop && storeID != model.JdShopMainStoreID {
|
||||
if sku.SkuSyncStatus != 0 {
|
||||
sku.SkuSyncStatus = model.SyncFlagSaleMask
|
||||
}
|
||||
}
|
||||
if !useVendorPriceDirectly &&
|
||||
!isSkuLockTimeValid(sku) {
|
||||
sku.VendorPrice = 0
|
||||
@@ -433,8 +475,10 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
||||
}
|
||||
} else {
|
||||
if sku.MergedStatus == model.SkuStatusNormal {
|
||||
if dao.IsVendorThingIDEmpty(sku.VendorCatID) && !strings.Contains(sku.StoreName, model.ExdStoreName) && vendorID != model.VendorIDYB {
|
||||
if dao.IsVendorThingIDEmpty(sku.VendorCatID) && !strings.Contains(sku.StoreName, model.ExdStoreName) && vendorID != model.VendorIDYB && vendorID != model.VendorIDJDShop {
|
||||
globals.SugarLogger.Warnf("syncStoreSkuNew 创建门店:%d商品:%d,但没有平台分类ID", storeID, sku.SkuID)
|
||||
} else if dao.IsVendorThingIDEmpty(utils.Int64ToStr(sku.VendorVendorCatID)) && vendorID == model.VendorIDJDShop {
|
||||
globals.SugarLogger.Warnf("syncStoreSkuNew 创建门店:%d商品:%d,但没有映射的平台ID", storeID, sku.SkuID)
|
||||
} else {
|
||||
createList = append(createList, sku)
|
||||
}
|
||||
@@ -442,20 +486,22 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
||||
}
|
||||
isNeedReorder = true
|
||||
} else {
|
||||
if dao.IsVendorThingIDEmpty(sku.VendorSkuID) {
|
||||
if dao.IsVendorThingIDEmpty(sku.VendorSkuID) && vendorID != model.VendorIDJDShop {
|
||||
// err = fmt.Errorf("门店:%d,修改没有创建的商品:%d", storeID, sku.SkuID)
|
||||
err = utils.NewErrorCode(fmt.Sprintf("门店:%d,修改没有创建的商品:%d", storeID, sku.SkuID), "-1", 0)
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeID, model.VendorChineseNames[vendorID], "异常同步错误")
|
||||
if parentTask == nil {
|
||||
return err
|
||||
if vendorID != model.VendorIDJDShop || (vendorID == model.VendorIDJDShop && storeID == model.JdShopMainStoreID && sku.StoreSkuStatus != model.SkuStatusDontSale) {
|
||||
err = utils.NewErrorCode(fmt.Sprintf("门店:%d,修改没有创建的商品:%d", storeID, sku.SkuID), "-1", 0)
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeID, model.VendorChineseNames[vendorID], "异常同步错误")
|
||||
if parentTask == nil {
|
||||
return err
|
||||
}
|
||||
parentTask.AddBatchErr(err)
|
||||
parentTask.AddFailedList(failedList)
|
||||
}
|
||||
parentTask.AddBatchErr(err)
|
||||
parentTask.AddFailedList(failedList)
|
||||
} else {
|
||||
isAdded2Update := false
|
||||
// 修改商品信息时不改价(以免活动引起的失败),而用单独的改价来改
|
||||
if (model.IsSyncStatusUpdate(sku.SkuSyncStatus) || (model.IsSyncStatusSeq(sku.SkuSyncStatus) && reorderHandler == nil)) && singleStoreHandler != nil {
|
||||
if dao.IsVendorThingIDEmpty(sku.VendorCatID) && !strings.Contains(sku.StoreName, model.ExdStoreName) && vendorID != model.VendorIDYB {
|
||||
if dao.IsVendorThingIDEmpty(sku.VendorCatID) && !strings.Contains(sku.StoreName, model.ExdStoreName) && vendorID != model.VendorIDYB && vendorID != model.VendorIDJDShop {
|
||||
globals.SugarLogger.Warnf("syncStoreSkuNew 修改门店:%d商品:%d,但没有平台分类ID", storeID, sku.SkuID)
|
||||
} else {
|
||||
isAdded2Update = true
|
||||
@@ -549,6 +595,19 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
||||
api.YinBaoAPI.SetCookie(".POSPALAUTH30220", yinbaoCookie)
|
||||
}
|
||||
}
|
||||
//如果平台是京东商城,则按商品skuname创建
|
||||
if vendorID == model.VendorIDJDShop {
|
||||
if len(createList) > 0 {
|
||||
rList := changeList2Jds(createList)
|
||||
createList = createList[:]
|
||||
createList = rList
|
||||
}
|
||||
if len(updateList) > 0 {
|
||||
rList2 := changeList2Jds(updateList)
|
||||
updateList = updateList[:]
|
||||
updateList = rList2
|
||||
}
|
||||
}
|
||||
task := tasksch.NewParallelTask("syncStoreSkuNew", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError2), ctx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
step := batchItemList[0].(int)
|
||||
@@ -1319,3 +1378,29 @@ func changeList2Yb(list1 []*dao.StoreSkuSyncInfo, list2 []*partner.StoreSkuInfo)
|
||||
}
|
||||
return rList1, rList2
|
||||
}
|
||||
|
||||
func changeList2Jds(list []*dao.StoreSkuSyncInfo) (rList []*dao.StoreSkuSyncInfo) {
|
||||
var (
|
||||
skuNameMap = make(map[int][]*dao.StoreSkuSyncInfo)
|
||||
)
|
||||
for _, v := range list {
|
||||
skuNameMap[v.NameID] = append(skuNameMap[v.NameID], v)
|
||||
}
|
||||
for k, v := range skuNameMap {
|
||||
storeSku := &dao.StoreSkuSyncInfo{
|
||||
StoreSkuSyncInfoJds: v,
|
||||
}
|
||||
storeSku.NameID = k
|
||||
storeSku.Name = v[0].Name
|
||||
storeSku.VendorCatID = v[0].VendorCatID
|
||||
storeSku.VendorVendorCatID = v[0].VendorVendorCatID
|
||||
storeSku.UnitPrice = v[0].UnitPrice
|
||||
storeSku.Img = v[0].Img
|
||||
storeSku.Img2 = v[0].Img2
|
||||
storeSku.DescImg = v[0].DescImg
|
||||
storeSku.JdsWareID = v[0].JdsWareID
|
||||
storeSku.CategoryName = v[0].CategoryName
|
||||
rList = append(rList, storeSku)
|
||||
}
|
||||
return rList
|
||||
}
|
||||
|
||||
@@ -1109,3 +1109,18 @@ func GetUserAgreement(ctx *jxcontext.Context, name, idNumber, bankNumber, mobile
|
||||
userAgrs, err = dao.GetUserAgreement(db, name, idNumber, bankNumber, mobile)
|
||||
return userAgrs, err
|
||||
}
|
||||
|
||||
func CleanUserOrderSMSMark(ctx *jxcontext.Context) (err error) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
)
|
||||
if time.Now().Day() == 1 {
|
||||
sql := `
|
||||
UPDATE user_order_sms
|
||||
SET sms_mark = ?
|
||||
`
|
||||
sqlParams := []interface{}{model.NO}
|
||||
_, err = dao.ExecuteSQL(db, sql, sqlParams)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -130,6 +130,7 @@ var (
|
||||
yinbaoCookie string
|
||||
feiePageCookie string
|
||||
jdStorePageEarning string
|
||||
jdsCookie string
|
||||
)
|
||||
|
||||
func GetImportantTaskID(taskName string) string {
|
||||
@@ -218,6 +219,9 @@ func Init() {
|
||||
ScheduleTimerFunc("CleanStoreIsBoughtMatter", func() {
|
||||
cms.CleanStoreIsBoughtMatter(jxcontext.AdminCtx)
|
||||
}, priceReferTimeList)
|
||||
ScheduleTimerFunc("CleanUserOrderSMSMark", func() {
|
||||
cms.CleanUserOrderSMSMark(jxcontext.AdminCtx)
|
||||
}, priceReferTimeList)
|
||||
ScheduleTimerFunc("exSync", func() {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
@@ -291,6 +295,10 @@ func Init() {
|
||||
if configs, err := dao.QueryConfigs(dao.GetDB(), "feiePageCookie", model.ConfigTypeCookie, ""); err == nil {
|
||||
feiePageCookie = configs[0].Value
|
||||
}
|
||||
if configs, err := dao.QueryConfigs(dao.GetDB(), "jdsCookie", model.ConfigTypeCookie, ""); err == nil {
|
||||
jdsCookie = configs[0].Value
|
||||
api.JdShopAPI.SetCookieWithStr(jdsCookie)
|
||||
}
|
||||
if configs, err := dao.QueryConfigs(dao.GetDB(), "yinbaoCookie", model.ConfigTypeCookie, ""); err == nil {
|
||||
yinbaoCookie := configs[0].Value
|
||||
api.YinBaoAPI.SetCookie(".POSPALAUTH30220", yinbaoCookie)
|
||||
@@ -393,6 +401,10 @@ func doDailyWork() {
|
||||
cms.CurVendorSync.SyncStoreSkusFromYb(jxcontext.AdminCtx, nil, true, true)
|
||||
//刷新京东商城订单结算价
|
||||
orderman.RefreshJdShopOrdersEarningPrice(jxcontext.AdminCtx, time.Now().AddDate(0, 0, -3).Format("20060102"), time.Now().Format("20060102"))
|
||||
//同步京东商城门店库存和商品
|
||||
cms.CurVendorSync.SyncJdsStoresSkus(jxcontext.AdminCtx, nil, true, true)
|
||||
//同步上架京东商城待售商品
|
||||
cms.RefreshJdsSkusStatus(jxcontext.AdminCtx)
|
||||
}
|
||||
|
||||
func RefreshRealMobile(ctx *jxcontext.Context, vendorID int, fromTime, toTime time.Time, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||
|
||||
@@ -8,6 +8,8 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/jdshopapi"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin"
|
||||
"git.rosy.net.cn/jx-callback/business/partner/delivery"
|
||||
"github.com/360EntSecGroup-Skylar/excelize"
|
||||
@@ -1496,3 +1498,122 @@ func addSku(outSkuId string, cagtegoryId int, shopCategories []int64, brandId in
|
||||
// return "456", err
|
||||
return api.JdAPI.AddSku(outSkuId, cagtegoryId, shopCategories, brandId, skuName, skuPrice, weight, images, fixedStatus, isSale, addParams)
|
||||
}
|
||||
|
||||
func UploadJdsImage(ctx *jxcontext.Context) (err error) {
|
||||
// db := dao.GetDB()
|
||||
// result1, _ := api.JdShopAPI.GetProvince()
|
||||
// for _, v := range result1 {
|
||||
// place1, _ := dao.GetPlaceByName(db, v.AreaName, 1, 0)
|
||||
// place1.JdsCode = v.AreaID
|
||||
// dao.UpdateEntity(db, place1, "JdsCode")
|
||||
// result2, _ := api.JdShopAPI.GetCity(v.AreaID)
|
||||
// for _, vv := range result2 {
|
||||
// place2, _ := dao.GetPlaceByName(db, vv.AreaName, 2, 0)
|
||||
// place2.JdsCode = vv.AreaID
|
||||
// dao.UpdateEntity(db, place2, "JdsCode")
|
||||
// place22, _ := dao.GetPlaceByName(db, vv.AreaName, 3, 0)
|
||||
// if place22 != nil {
|
||||
// place22.JdsCode = vv.AreaID
|
||||
// dao.UpdateEntity(db, place22, "JdsCode")
|
||||
// }
|
||||
// result3, _ := api.JdShopAPI.GetCounty(vv.AreaID)
|
||||
// for _, vvv := range result3 {
|
||||
// place3, _ := dao.GetPlaceByName(db, vvv.AreaName, 3, 0)
|
||||
// place3.JdsCode = vvv.AreaID
|
||||
// dao.UpdateEntity(db, place3, "JdsCode")
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
///建店
|
||||
// beginTime := utils.Str2Time("2020-05-18")
|
||||
// endTime := utils.Str2Time("2020-05-24")
|
||||
// result, _ := misc.GetStoreTotalScoreList(nil, 0, "", beginTime, endTime, true, 50, 100, 1, 700)
|
||||
// for _, v := range result.StoreTotalScoreList {
|
||||
// storeMaps, _ := dao.GetStoresMapList(db, []int{model.VendorIDJX}, []int{v.StoreID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "")
|
||||
// if len(storeMaps) == 0 {
|
||||
// stores, _ := dao.GetStoreList(db, []int{v.StoreID}, nil, nil, nil, "")
|
||||
// store := stores[0]
|
||||
// if store.Status != model.StoreStatusDisabled && !strings.Contains(store.Name, "不做") {
|
||||
// pricePercentagePack := ""
|
||||
// if store.PayPercentage >= 90 {
|
||||
// pricePercentagePack = "京西100"
|
||||
// } else if store.PayPercentage >= 80 {
|
||||
// pricePercentagePack = "京西80"
|
||||
// } else {
|
||||
// pricePercentagePack = "京西70"
|
||||
// }
|
||||
// storeMap := &model.StoreMap{
|
||||
// Status: 1,
|
||||
// VendorID: model.VendorIDJX,
|
||||
// AutoPickup: 1,
|
||||
// DeliveryCompetition: 1,
|
||||
// PricePercentage: 100,
|
||||
// IsSync: 1,
|
||||
// VendorStoreID: utils.Int2Str(v.StoreID),
|
||||
// PricePercentagePack: pricePercentagePack,
|
||||
// }
|
||||
// _, err = cms.AddStoreVendorMap(ctx, db, model.VendorIDJX, "", v.StoreID, storeMap)
|
||||
// if err != nil {
|
||||
// continue
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
//京东商城街道name
|
||||
// var stores []*model.Store
|
||||
// sql := `
|
||||
// SELECT b.*
|
||||
// FROM store_map a, store b
|
||||
// WHERE a.store_id = b.id
|
||||
// AND a.vendor_store_id = '' AND a.vendor_id = 5 AND a.deleted_at = ?
|
||||
// AND b.deleted_at = ?
|
||||
// `
|
||||
// sqlParams := []interface{}{utils.DefaultTimeValue, utils.DefaultTimeValue}
|
||||
// err = dao.GetRows(db, &stores, sql, sqlParams)
|
||||
// for _, v := range stores {
|
||||
// result, _ := api.AutonaviAPI.GetCoordinateAreaInfo(jxutils.IntCoordinate2Standard(v.Lng), jxutils.IntCoordinate2Standard(v.Lat))
|
||||
// if result["regeocode"] != nil {
|
||||
// street := result["regeocode"].(map[string]interface{})["addressComponent"].(map[string]interface{})["township"].(string)
|
||||
// if street != "" {
|
||||
// storeMaps, _ := dao.GetStoresMapList(db, []int{model.VendorIDJDShop}, []int{v.ID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "")
|
||||
// storeMap := storeMaps[0]
|
||||
// storeMap.JdsStreetName = street
|
||||
// dao.UpdateEntity(db, storeMap, "JdsStreetName")
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// var stores []*model.Store
|
||||
// sql := `
|
||||
// SELECT a.*
|
||||
// FROM store a
|
||||
// LEFT JOIN store_map b ON a.id = b.store_id AND b.vendor_id = 5 AND b.deleted_at = '1970-01-01 00:00:00'
|
||||
// WHERE 1=1
|
||||
// AND (a.status = 1 OR a.status = 0)
|
||||
// AND b.id IS NULL
|
||||
// AND a.deleted_at = '1970-01-01 00:00:00'
|
||||
// `
|
||||
// err = dao.GetRows(db, &stores, sql, nil)
|
||||
// for _, v := range stores {
|
||||
// storeMap := &model.StoreMap{
|
||||
// Status: 1,
|
||||
// VendorID: model.VendorIDJDShop,
|
||||
// AutoPickup: 1,
|
||||
// DeliveryCompetition: 1,
|
||||
// PricePercentage: 100,
|
||||
// IsSync: 1,
|
||||
// SyncRule: 1,
|
||||
// }
|
||||
// _, err = cms.AddStoreVendorMap(ctx, db, model.VendorIDJDShop, "", v.ID, storeMap)
|
||||
// if err != nil {
|
||||
// continue
|
||||
// }
|
||||
// }
|
||||
_, err = api.JdShopAPI.AllOrders(&jdshopapi.AllOrdersParam{
|
||||
Current: 1,
|
||||
PageSize: 10,
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package tempop
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/globals/api2"
|
||||
@@ -24,3 +27,18 @@ func TestJdStoreInfo1125(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func Testaa(t *testing.T) {
|
||||
request, _ := http.NewRequest(http.MethodGet, "https://stores.shop.jd.com/stores/updateStoreStatus?storeId=24332466&storeStatus=1", nil)
|
||||
c := &http.Cookie{
|
||||
Name: "thor",
|
||||
Value: "80FAF09E9A09B6E618A68057BDFCFCB8C86E8252DC9F7D3B34572625904FBA0AB6BF053A5325612EC0407791BB05F5301356E71E8B282C40C06D0B5DF3439DEECB102A78FAFF7AC0FC4E2D1FA8DD8BBAE1A011E50B5C74F1870AD982D7BF453F470F31F2241B73AC4C25485025C2ABEBC8A538AF7257824D2FAEE300A1435175B0B451FB5C19B78D729FC83152CA3BAF",
|
||||
}
|
||||
request.AddCookie(c)
|
||||
client := &http.Client{}
|
||||
fmt.Println("test1", request.URL)
|
||||
response, _ := client.Do(request)
|
||||
defer response.Body.Close()
|
||||
bodyData, _ := ioutil.ReadAll(response.Body)
|
||||
fmt.Println("test1", string(bodyData))
|
||||
}
|
||||
|
||||
@@ -159,6 +159,9 @@ func UploadImage2Vendors(ctx *jxcontext.Context, parentTask tasksch.ITask, dataR
|
||||
if dataRes.MtwmURL == "" {
|
||||
vendorIDs = append(vendorIDs, model.VendorIDMTWM)
|
||||
}
|
||||
// if dataRes.JdsURL == "" {
|
||||
// vendorIDs = append(vendorIDs, model.VendorIDJDShop)
|
||||
// }
|
||||
if len(vendorIDs) > 0 {
|
||||
imgName := jxutils.GetShortNameFromURL(dataRes.MainURL)
|
||||
task := tasksch.NewSeqTask(fmt.Sprintf("上传图片至平台1:%s,%s", dataRes.Name, dataRes.MainURL), ctx,
|
||||
@@ -206,6 +209,10 @@ func UploadImage2Vendors(ctx *jxcontext.Context, parentTask tasksch.ITask, dataR
|
||||
dataRes.MtwmURL = imgHint
|
||||
updateField = "MtwmURL"
|
||||
}
|
||||
// else if vendorID == model.VendorIDJDShop {
|
||||
// dataRes.JdsURL = imgHint
|
||||
// updateField = "JdsURL"
|
||||
// }
|
||||
dao.UpdateEntity(db, dataRes, updateField)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -359,6 +359,32 @@ func ComposeSkuNameOriginal(prefix, name, comment, unit string, spec_quality flo
|
||||
return skuName
|
||||
}
|
||||
|
||||
func ComposeSkuNameForJds(prefix, name, comment, unit string, spec_quality float32, spec_unit string, maxLen int) (skuName string) {
|
||||
strBuilder := &strings.Builder{}
|
||||
if prefix != "" {
|
||||
strBuilder.WriteString("[")
|
||||
strBuilder.WriteString(prefix)
|
||||
strBuilder.WriteString("]")
|
||||
}
|
||||
skuName += name
|
||||
strBuilder.WriteString(name)
|
||||
if comment != "" {
|
||||
strBuilder.WriteString(" ")
|
||||
strBuilder.WriteString(comment)
|
||||
}
|
||||
if unit == "份" {
|
||||
strBuilder.WriteString("约")
|
||||
}
|
||||
if unit != "" {
|
||||
strBuilder.WriteString(ComposeSkuSpec(spec_quality, spec_unit))
|
||||
}
|
||||
skuName = strBuilder.String()
|
||||
if maxLen > 0 {
|
||||
skuName = utils.LimitUTF8StringLen(skuName, maxLen)
|
||||
}
|
||||
return skuName
|
||||
}
|
||||
|
||||
func ComposeSkuName(prefix, name, comment, unit string, spec_quality float32, spec_unit string, maxLen int, exPrefix string, exPrefixBegin, exPrefixEnd *time.Time) (skuName string) {
|
||||
if exPrefix != "" && exPrefixBegin != nil && exPrefixEnd != nil {
|
||||
if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixBegin) >= 0 && utils.Time2Date(time.Now()).Sub(*exPrefixEnd) <= 0 {
|
||||
@@ -382,6 +408,19 @@ func ComposeSkuNameSync(prefix, name, comment, unit string, spec_quality float32
|
||||
return skuName
|
||||
}
|
||||
|
||||
func ComposeSkuNameSync2(prefix, name, comment, unit string, spec_quality float32, spec_unit string, maxLen int, exPrefix string, exPrefixBegin, exPrefixEnd *time.Time) (skuName string) {
|
||||
if exPrefix != "" && exPrefixBegin != nil && exPrefixEnd != nil {
|
||||
if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixBegin) >= 0 && utils.Time2Date(time.Now()).Sub(*exPrefixEnd) <= 0 {
|
||||
skuName = exPrefix
|
||||
}
|
||||
if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixEnd) > 0 {
|
||||
skuName = ""
|
||||
}
|
||||
}
|
||||
skuName += ComposeSkuNameForJds(prefix, name, comment, unit, spec_quality, spec_unit, maxLen)
|
||||
return skuName
|
||||
}
|
||||
|
||||
func ComposeSpuName(prefix, name string, maxLen int) (spuName string) {
|
||||
if prefix != "" {
|
||||
spuName = "[" + prefix + "]"
|
||||
|
||||
@@ -43,7 +43,9 @@ func SendSMSMsg(mobileList []string, signName, templateCode string, templatePara
|
||||
globals.SugarLogger.Infof(errMsg)
|
||||
}
|
||||
} else {
|
||||
err = updateStoreSMSNotifyMark(order)
|
||||
if order != nil {
|
||||
err = updateStoreSMSNotifyMark(order)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -78,10 +80,20 @@ func NotifyOrderCanceled(order *model.GoodsOrder) (err error) {
|
||||
}
|
||||
|
||||
func isPushSMS(order *model.GoodsOrder) bool {
|
||||
stores, _ := dao.GetStoreList(dao.GetDB(), []int{order.StoreID}, nil, nil, nil, "")
|
||||
storeID := 0
|
||||
if order.StoreID == 0 {
|
||||
storeID = order.JxStoreID
|
||||
} else {
|
||||
storeID = order.StoreID
|
||||
}
|
||||
stores, _ := dao.GetStoresMapList(dao.GetDB(), []int{order.VendorID}, []int{storeID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "")
|
||||
if len(stores) > 0 {
|
||||
if stores[0].SMSNotifyMark == model.NO {
|
||||
return true
|
||||
if stores[0].IsOrder == model.NO {
|
||||
if storeID == model.MatterStoreID {
|
||||
return false
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
@@ -99,3 +111,90 @@ func updateStoreSMSNotifyMark(order *model.GoodsOrder) (err error) {
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
//每月向用户发送
|
||||
func NotifyNewUserOrder(order *model.GoodsOrder) (err error) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
storeTel string
|
||||
storeID int
|
||||
mobile string
|
||||
)
|
||||
if order.StoreID == 0 {
|
||||
storeID = order.JxStoreID
|
||||
} else {
|
||||
storeID = order.StoreID
|
||||
}
|
||||
if order.ConsigneeMobile2 != "" {
|
||||
mobile = order.ConsigneeMobile2
|
||||
uoSMS, err := dao.GetUserOrderSMS(db, mobile, "")
|
||||
stores, _ := dao.GetStoreList(db, []int{storeID}, nil, nil, nil, "")
|
||||
if len(stores) > 0 {
|
||||
if stores[0].Tel1 == "" {
|
||||
storeTel = stores[0].Tel2
|
||||
} else {
|
||||
storeTel = stores[0].Tel1
|
||||
}
|
||||
}
|
||||
if uoSMS == nil {
|
||||
uoSMSc := &model.UserOrderSms{
|
||||
Mobile: mobile,
|
||||
Name: order.ConsigneeName,
|
||||
VendorUserID: order.VendorUserID,
|
||||
TotalCount: 0,
|
||||
SMSMark: model.NO,
|
||||
}
|
||||
err = dao.CreateEntity(db, uoSMSc)
|
||||
err = SendSMSMsg([]string{uoSMSc.Mobile}, globals.SMSSignName, globals.SMSNewUserOrderTemplate, map[string]interface{}{
|
||||
"tel": storeTel,
|
||||
}, nil)
|
||||
if err == nil {
|
||||
uoSMS2, _ := dao.GetUserOrderSMS(db, mobile, "")
|
||||
uoSMS2.SMSMark = model.YES
|
||||
uoSMS2.TotalCount++
|
||||
_, err = dao.UpdateEntity(db, uoSMS2, "SMSMark", "TotalCount")
|
||||
}
|
||||
} else {
|
||||
if uoSMS.SMSMark != model.YES {
|
||||
err = SendSMSMsg([]string{uoSMS.Mobile}, globals.SMSSignName, globals.SMSNewUserOrderTemplate, map[string]interface{}{
|
||||
"tel": storeTel,
|
||||
}, nil)
|
||||
if err == nil {
|
||||
uoSMS.SMSMark = model.YES
|
||||
uoSMS.TotalCount++
|
||||
_, err = dao.UpdateEntity(db, uoSMS, "SMSMark", "TotalCount")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
//给配送员发短信
|
||||
func NotifyNewCourierOrder(bill *model.Waybill) (err error) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
storeTel string
|
||||
storeID int
|
||||
)
|
||||
order := &model.GoodsOrder{}
|
||||
order.VendorOrderID = bill.VendorOrderID
|
||||
err = dao.GetEntity(db, order, "VendorOrderID")
|
||||
if order.StoreID == 0 {
|
||||
storeID = order.JxStoreID
|
||||
} else {
|
||||
storeID = order.StoreID
|
||||
}
|
||||
stores, _ := dao.GetStoreList(db, []int{storeID}, nil, nil, nil, "")
|
||||
if len(stores) > 0 {
|
||||
if stores[0].Tel1 == "" {
|
||||
storeTel = stores[0].Tel2
|
||||
} else {
|
||||
storeTel = stores[0].Tel1
|
||||
}
|
||||
}
|
||||
err = SendSMSMsg([]string{bill.CourierMobile}, globals.SMSSignName, globals.SMSNewOrderTemplate, map[string]interface{}{
|
||||
"tel": storeTel,
|
||||
}, nil)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ const (
|
||||
WX_TEMPLATE_VENDERCOLOR_BAD_COMMENTS = "#4F4DA0"
|
||||
|
||||
WX_NEWORDER_TEMPLATE_ID = "_DtNGwmOeR6TkkTVUblxLIlkV2MAPOX57TkvfdqG6nY" //微信新订单推送
|
||||
WX_ADJUSTORDER_TEMPLATE_ID = "N5rmV2-PDf3opjkv23IdLc76VnFThr_uOKSh5FzT13M" //微信调整订单推送
|
||||
WX_MTPS_DELIVERY_GRABDONE_TEMPLATE_ID = "h4dkON6AgnHz1XmaksEUB_8Bcir4V8MSexUhC149pPE" //微信美团配送员接单推送
|
||||
WX_MTPS_DELIVERY_DONE_TEMPLATE_ID = "YXdCrQAHZlcZX1htYUiarrLmtkmKAjp7rynjwObgODo" //微信美团配送员配送完成推送
|
||||
WX_MTPS_UNABLE_DELIVER_TEMPLATE_ID = "ZFph5Hp7oLlrzVRXbsKIC_StmaBeB9Dlp4tlHeAmUQ8" //微信美团配送配送能力不足推送
|
||||
@@ -718,3 +719,40 @@ func SendStoreMessage(ctx *jxcontext.Context, title, content string, storeIDs []
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
|
||||
func NotifyAdjustOrder(order *model.GoodsOrder) (err error) {
|
||||
globals.SugarLogger.Debugf("NotifyAdjustOrder orderID:%s", order.VendorOrderID)
|
||||
if order.VendorID == model.VendorIDELM {
|
||||
return nil
|
||||
}
|
||||
|
||||
if !model.IsOrderSolid(order) {
|
||||
globals.SugarLogger.Infof("NotifyAdjustOrder orderID:%s is not solid", order.VendorOrderID)
|
||||
return nil
|
||||
}
|
||||
sb := new(strings.Builder)
|
||||
sb.WriteString("老板,")
|
||||
sb.WriteString(order.ConsigneeName)
|
||||
sb.WriteString("调整了订单商品,请及时查看!")
|
||||
sb.WriteString(getOrderDetailBrief(order))
|
||||
data := map[string]interface{}{
|
||||
"first": map[string]interface{}{
|
||||
"value": sb.String(),
|
||||
"color": WX_NEW_ORDER_TEMPLATE_COLOR,
|
||||
},
|
||||
"keyword1": map[string]interface{}{
|
||||
"value": jxutils.IntPrice2Standard(order.NewEarningPrice),
|
||||
"color": WX_NEW_ORDER_TEMPLATE_COLOR,
|
||||
},
|
||||
"keyword2": map[string]interface{}{
|
||||
"value": utils.Time2Str(order.CreatedAt),
|
||||
"color": WX_NEW_ORDER_TEMPLATE_COLOR,
|
||||
},
|
||||
"keyword3": map[string]interface{}{
|
||||
"value": model.OrderStatusName[order.Status],
|
||||
"color": WX_NEW_ORDER_TEMPLATE_COLOR,
|
||||
},
|
||||
}
|
||||
storeID := jxutils.GetSaleStoreIDFromOrder(order)
|
||||
return SendMsgToStore(storeID, WX_ADJUSTORDER_TEMPLATE_ID, globals.WxBackstageHost+fmt.Sprintf("%s%d", WX_TO_ORDER_PAGE_URL, storeID), WX_MINI_TO_ORDER_PAGE_URL, data)
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ const (
|
||||
VendorIDELM = 2
|
||||
VendorIDEBAI = 3
|
||||
VendorIDYB = 4 //银豹
|
||||
VendorIDJDShop = 5 //京东商城
|
||||
VendorIDWSC = 11 // 微盟微商城
|
||||
VendorIDPurchaseEnd = 11
|
||||
VendorIDJX = 9 // 这是一个假的京西VendorID
|
||||
@@ -63,13 +64,14 @@ type VendorInfo struct {
|
||||
|
||||
var (
|
||||
VendorNames = map[int]string{
|
||||
VendorIDJD: "Jd",
|
||||
VendorIDMTWM: "Mtwm",
|
||||
VendorIDELM: "Elm",
|
||||
VendorIDEBAI: "Ebai",
|
||||
VendorIDWSC: "Wsc",
|
||||
VendorIDYB: "Yb",
|
||||
VendorIDJX: "Jx",
|
||||
VendorIDJD: "Jd",
|
||||
VendorIDMTWM: "Mtwm",
|
||||
VendorIDELM: "Elm",
|
||||
VendorIDEBAI: "Ebai",
|
||||
VendorIDWSC: "Wsc",
|
||||
VendorIDYB: "Yb",
|
||||
VendorIDJX: "Jx",
|
||||
VendorIDJDShop: "Jds",
|
||||
|
||||
VendorIDDada: "Dada",
|
||||
VendorIDMTPS: "Mtps",
|
||||
@@ -90,13 +92,14 @@ var (
|
||||
}
|
||||
|
||||
VendorChineseNames = map[int]string{
|
||||
VendorIDJD: "京东到家",
|
||||
VendorIDMTWM: "美团外卖",
|
||||
VendorIDELM: "饿了么",
|
||||
VendorIDEBAI: "饿百新零售",
|
||||
VendorIDYB: "银豹",
|
||||
VendorIDWSC: "微盟微商城",
|
||||
VendorIDJX: "京西商城",
|
||||
VendorIDJD: "京东到家",
|
||||
VendorIDMTWM: "美团外卖",
|
||||
VendorIDELM: "饿了么",
|
||||
VendorIDEBAI: "饿百新零售",
|
||||
VendorIDYB: "银豹",
|
||||
VendorIDJDShop: "京东商城",
|
||||
VendorIDWSC: "微盟微商城",
|
||||
VendorIDJX: "京西商城",
|
||||
|
||||
VendorIDDada: "达达众包",
|
||||
VendorIDMTPS: "美团配送",
|
||||
|
||||
@@ -33,6 +33,7 @@ type DataResource struct {
|
||||
QiniuURL string `orm:"size(512);column(qiniu_url);index" json:"qiniuURL"`
|
||||
EbaiURL string `orm:"size(512);column(ebai_url);index" json:"ebaiURL"`
|
||||
MtwmURL string `orm:"size(512);column(mtwm_url);index" json:"mtwmURL"`
|
||||
JdsURL string `orm:"size(512);column(jds_url);index" json:"jdsURL"`
|
||||
|
||||
Remark string `orm:"size(1024)" json:"remark"`
|
||||
}
|
||||
|
||||
@@ -413,8 +413,6 @@ func GetEffectiveActStoreSkuInfo(db *DaoDB, actID int, vendorIDs []int, actType
|
||||
if globals.IsStoreSkuAct {
|
||||
sql += " AND t1.is_special = 0"
|
||||
}
|
||||
// globals.SugarLogger.Debug(sql)
|
||||
// globals.SugarLogger.Debug(utils.Format4Output(sqlParams, false))
|
||||
err = GetRows(db, &actStoreSkuList, sql, sqlParams...)
|
||||
return actStoreSkuList, err
|
||||
}
|
||||
|
||||
@@ -1270,3 +1270,14 @@ func GetMatterChildOrders(db *DaoDB, vendorOrderID string) (goods []*model.Goods
|
||||
err = GetRows(db, &goods, sql, sqlParams)
|
||||
return goods, err
|
||||
}
|
||||
|
||||
func GetSimpleOrder(db *DaoDB, vendorOrderID string) (goods *model.GoodsOrder, err error) {
|
||||
sql := `
|
||||
SELECT *
|
||||
FROM goods_order
|
||||
WHERE vendor_order_id = ?
|
||||
`
|
||||
sqlParams := []interface{}{vendorOrderID}
|
||||
err = GetRow(db, &goods, sql, sqlParams)
|
||||
return goods, err
|
||||
}
|
||||
|
||||
@@ -239,3 +239,22 @@ func GetUserAgreement(db *DaoDB, name, idNumber, bankNumber, mobile string) (use
|
||||
err = GetRows(db, &userAgrs, sql, sqlParams)
|
||||
return userAgrs, err
|
||||
}
|
||||
|
||||
func GetUserOrderSMS(db *DaoDB, mobile, name string) (userOrderSms *model.UserOrderSms, err error) {
|
||||
sql := `
|
||||
SELECT *
|
||||
FROM user_order_sms
|
||||
WHERE 1=1
|
||||
`
|
||||
sqlParams := []interface{}{}
|
||||
if mobile != "" {
|
||||
sql += " AND mobile = ?"
|
||||
sqlParams = append(sqlParams, mobile)
|
||||
}
|
||||
if name != "" {
|
||||
sql += " AND name like ?"
|
||||
sqlParams = append(sqlParams, "%"+name+"%")
|
||||
}
|
||||
err = GetRow(db, &userOrderSms, sql, sqlParams)
|
||||
return userOrderSms, err
|
||||
}
|
||||
|
||||
@@ -210,8 +210,9 @@ func GetSkuCategoryWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string,
|
||||
LEFT JOIN thing_map t1pm ON t1pm.thing_id = t1p.id AND t1pm.thing_type = ? AND t1m.deleted_at = ?
|
||||
AND t1pm.vendor_id = t1m.vendor_id AND t1pm.vendor_org_code = t1m.vendor_org_code
|
||||
WHERE 1 = 1
|
||||
AND t1.is_sync <> ?
|
||||
`
|
||||
sqlParams = append(sqlParams, model.ThingTypeCategory, utils.DefaultTimeValue)
|
||||
sqlParams = append(sqlParams, model.ThingTypeCategory, utils.DefaultTimeValue, model.YES)
|
||||
if mustDirty {
|
||||
sql += " AND t1m.sync_status IS NOT NULL AND t1m.sync_status <> 0"
|
||||
} else {
|
||||
|
||||
@@ -35,8 +35,13 @@ type StoreDetail struct {
|
||||
DeliveryCompetition int8 `orm:"default(1)" json:"deliveryCompetition"` // 是否支持配送竞争
|
||||
IsSync int8 `orm:"default(1)" json:"isSync"` // 是否同步
|
||||
|
||||
DistrictName string `json:"districtName"`
|
||||
CityName string `json:"cityName"`
|
||||
DistrictName string `json:"districtName"`
|
||||
CityName string `json:"cityName"`
|
||||
ProvinceName string `json:"provinceName"` //省名
|
||||
JdCode int `json:"jdCode"`
|
||||
JdsCode int `json:"jdsCode"` //京东商城地址代码
|
||||
JdsStreetCode int `json:"jdsStreetCode"` //京东商城直辖市街道code
|
||||
JdsStreetName string `json:"jdsStreetName"` //京东商城直辖市街道
|
||||
|
||||
IsAutoOrder int8 `json:"isAutoOrder"` // 平台是否自动接单,-1:否,0:未知,1:是
|
||||
MarketManName string `json:"marketManName"` //市场负责人
|
||||
@@ -94,9 +99,13 @@ func getStoreDetail(db *DaoDB, storeID, vendorID int, vendorStoreID string) (sto
|
||||
SELECT t1.*,
|
||||
t2.vendor_store_id, t2.status vendor_status, t2.delivery_fee_deduction_sill, t2.delivery_fee_deduction_fee, t2.sync_status, t2.vendor_org_code,
|
||||
t2.price_percentage, t2.auto_pickup, t2.delivery_type, t2.delivery_competition, t2.is_sync, t2.vendor_store_name, t2.is_order, t2.yb_app_id, t2.yb_app_key, t2.yb_store_prefix,
|
||||
t2.jds_street_code, t2.jds_street_name,
|
||||
t3.value price_percentage_pack_str,
|
||||
t4.value freight_deduction_pack_str,
|
||||
province.name province_name,
|
||||
district.name district_name,
|
||||
district.jds_code jds_code,
|
||||
district.jd_code jd_code,
|
||||
city.name city_name,
|
||||
IF(mm.name <> '', mm.name, mm.user_id2) market_man_name,
|
||||
IF(om.name <> '', om.name, om.user_id2) operator_name,
|
||||
@@ -106,6 +115,7 @@ func getStoreDetail(db *DaoDB, storeID, vendorID int, vendorStoreID string) (sto
|
||||
LEFT JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND t2.deleted_at = ?
|
||||
LEFT JOIN place city ON city.code = t1.city_code
|
||||
LEFT JOIN place district ON district.code = t1.district_code
|
||||
LEFT JOIN place province ON city.parent_code = province.code
|
||||
LEFT JOIN new_config t3 ON t3.key = t2.price_percentage_pack AND t3.type = ? AND t3.deleted_at = ?
|
||||
LEFT JOIN new_config t4 ON t4.key = t2.freight_deduction_pack AND t4.type = ? AND t4.deleted_at = ?
|
||||
LEFT JOIN user mm ON mm.mobile <> '' AND mm.mobile = t1.market_man_phone
|
||||
@@ -439,6 +449,9 @@ func AddStoreCategoryMap(db *DaoDB, storeID, categoryID int, vendorID int, vendo
|
||||
} else if vendorID == model.VendorIDYB {
|
||||
storeCat.YbID = utils.Str2Int64WithDefault(vendorCategoryID, 0)
|
||||
storeCat.YbSyncStatus = status
|
||||
} else if vendorID == model.VendorIDJDShop {
|
||||
storeCat.JdsID = utils.Str2Int64WithDefault(vendorCategoryID, 0)
|
||||
storeCat.JdsSyncStatus = status
|
||||
} else {
|
||||
panic("unsupported vendor")
|
||||
}
|
||||
|
||||
@@ -21,8 +21,9 @@ type StoreSkuAndAct struct {
|
||||
|
||||
var (
|
||||
dataResFieldMap = map[int]string{
|
||||
model.VendorIDMTWM: "mtwm_url",
|
||||
model.VendorIDEBAI: "ebai_url",
|
||||
model.VendorIDMTWM: "mtwm_url",
|
||||
model.VendorIDEBAI: "ebai_url",
|
||||
model.VendorIDJDShop: "jds_url",
|
||||
}
|
||||
salePriceLimit = 100
|
||||
)
|
||||
@@ -43,8 +44,9 @@ type SkuStoreCatInfo struct {
|
||||
}
|
||||
|
||||
type StoreSkuSyncInfo struct {
|
||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||||
VendorOrgCode string `orm:"size(32)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空
|
||||
StoreSkuSyncInfoJds []*StoreSkuSyncInfo
|
||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||||
VendorOrgCode string `orm:"size(32)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空
|
||||
|
||||
// 平台无关的store sku信息
|
||||
BindID int `orm:"column(bind_id)"` // 换名的原因是与Sku.ID同名区别
|
||||
@@ -60,6 +62,7 @@ type StoreSkuSyncInfo struct {
|
||||
StoreSkuStatus int
|
||||
SkuSyncStatus int8
|
||||
VendorSkuID string `orm:"column(vendor_sku_id)"`
|
||||
JdsWareID int64 `orm:"column(jds_ware_id)" json:"jdsWareID"`
|
||||
BindDeletedAt time.Time `orm:"type(datetime)" json:"bindDeletedAt"`
|
||||
|
||||
model.Sku
|
||||
@@ -89,8 +92,8 @@ type StoreSkuSyncInfo struct {
|
||||
Img2 string
|
||||
DescImg string
|
||||
|
||||
VendorVendorCatID int64 `orm:"column(vendor_vendor_cat_id)"` // 平台商品分类(叶子结点)
|
||||
|
||||
VendorVendorCatID int64 `orm:"column(vendor_vendor_cat_id)"` // 平台商品分类(叶子结点)
|
||||
CategoryName string `json:"categoryName"` //分类名
|
||||
// sku的商家分类信息
|
||||
SkuCatSyncStatus int8
|
||||
SkuVendorCatID string `orm:"column(sku_vendor_cat_id)"`
|
||||
@@ -216,19 +219,23 @@ type StoreSkuExt struct {
|
||||
EbaiID string `orm:"column(ebai_id);index" json:"ebaiID"`
|
||||
MtwmID string `orm:"column(mtwm_id)" json:"mtwmID"` // 这个也不是必须的,只是为了DAO取数据语句一致
|
||||
YbID string `orm:"column(yb_id);index" json:"ybID"`
|
||||
JdsID string `orm:"column(jds_id);index" json:"jdsID"`
|
||||
|
||||
JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
|
||||
EbaiSyncStatus int8 `orm:"default(2)" json:"ebaiSyncStatus"`
|
||||
MtwmSyncStatus int8 `orm:"default(2)" json:"mtwmSyncStatus"`
|
||||
YbSyncStatus int8 `orm:"default(2)" json:"ybSyncStatus"`
|
||||
JdsSyncStatus int8 `orm:"default(2)" json:"jdsSyncStatus"` //京东商城
|
||||
|
||||
JdPrice int `json:"jdPrice"`
|
||||
EbaiPrice int `json:"ebaiPrice"`
|
||||
MtwmPrice int `json:"mtwmPrice"`
|
||||
JxPrice int `json:"jxPrice"`
|
||||
YbPrice int `json:"ybPrice"`
|
||||
JdsPrice int `json:"jdsPrice"`
|
||||
|
||||
JdLockTime *time.Time `orm:"null" json:"jdLockTime,omitempty"`
|
||||
JdsLockTime *time.Time `orm:"null" json:"jdsLockTime,omitempty"`
|
||||
EbaiLockTime *time.Time `orm:"null" json:"ebaiLockTime,omitempty"`
|
||||
MtwmLockTime *time.Time `orm:"null" json:"mtwmLockTime,omitempty"`
|
||||
JxLockTime *time.Time `orm:"null" json:"jxLockTime,omitempty"`
|
||||
@@ -355,8 +362,8 @@ func GetStoreCategories(db *DaoDB, vendorID, storeID int, skuIDs []int, level in
|
||||
sql += `
|
||||
LEFT JOIN sku_category t4p ON t4.parent_id = t4p.id
|
||||
LEFT JOIN store_sku_category_map t5p ON t4p.id = t5p.category_id AND t5.store_id = t5p.store_id AND t5p.deleted_at = ?
|
||||
WHERE t5.store_id = ? AND t5.deleted_at = ?`
|
||||
sqlParams = append(sqlParams, utils.DefaultTimeValue, storeID, utils.DefaultTimeValue)
|
||||
WHERE t5.store_id = ? AND t5.deleted_at = ? AND t4.is_sync <> ?`
|
||||
sqlParams = append(sqlParams, utils.DefaultTimeValue, storeID, utils.DefaultTimeValue, model.YES)
|
||||
if mustDirty {
|
||||
sql += " AND t5.%s_sync_status <> 0"
|
||||
fieldPrefixParams = append(fieldPrefixParams, fieldPrefix)
|
||||
@@ -392,19 +399,20 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
|
||||
t14.vendor_id, t14.vendor_org_code,
|
||||
t1.id bind_id, t1.sku_id, t1.price, t1.unit_price, t1.status store_sku_status,
|
||||
%s vendor_sku_id, t1.%s_sync_status sku_sync_status, t1.%s_price vendor_price, t1.%s_lock_time lock_time,
|
||||
t1.store_id, t1.deleted_at bind_deleted_at,t1.status_sale_begin,t1.status_sale_end,
|
||||
t1.store_id, t1.deleted_at bind_deleted_at,t1.status_sale_begin,t1.status_sale_end, t1.jds_ware_id,
|
||||
t2.*,
|
||||
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.status name_status, t3.ex_prefix, t3.ex_prefix_begin, t3.ex_prefix_end, t3.category_id name_category_id, t3.yb_name_suffix,
|
||||
IF(t11.%s <> '', t11.%s, t3.img) img,
|
||||
IF(t12.%s <> '', t12.%s, t3.img2) img2,
|
||||
t13.%s desc_img,
|
||||
IF(t13.%s <> '', t13.%s, t3.desc_img) desc_img,
|
||||
t4.%s_category_id vendor_vendor_cat_id,
|
||||
t4.name category_name,
|
||||
ts.name store_name`
|
||||
fmtParams := []interface{}{
|
||||
skuVendorIDField, fieldPrefix, fieldPrefix, fieldPrefix,
|
||||
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
|
||||
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
|
||||
GetDataResFieldName(vendorID),
|
||||
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
|
||||
fieldPrefix,
|
||||
}
|
||||
if isSingleStorePF {
|
||||
@@ -520,7 +528,7 @@ func GetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSyncInf
|
||||
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.status name_status, t3.ex_prefix, t3.ex_prefix_begin, t3.ex_prefix_end, t3.category_id name_category_id,
|
||||
IF(t11.%s <> '', t11.%s, t3.img) img,
|
||||
IF(t12.%s <> '', t12.%s, t3.img2) img2,
|
||||
t13.%s desc_img,
|
||||
IF(t13.%s <> '', t13.%s, t3.desc_img) desc_img,
|
||||
t4.%s_category_id vendor_vendor_cat_id,
|
||||
t4m.sync_status cat_sync_status, t4m.vendor_thing_id vendor_cat_id,
|
||||
t5skum.sync_status sku_cat_sync_status, t5skum.vendor_thing_id sku_vendor_cat_id
|
||||
@@ -553,7 +561,7 @@ func GetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSyncInf
|
||||
fieldPrefix, fieldPrefix, fieldPrefix,
|
||||
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
|
||||
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
|
||||
GetDataResFieldName(vendorID),
|
||||
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
|
||||
fieldPrefix)
|
||||
// globals.SugarLogger.Debug(sql)
|
||||
// globals.SugarLogger.Debug(utils.Format4Output(sqlParams, false))
|
||||
@@ -1507,3 +1515,21 @@ func UpdateYbOtherSku(db *DaoDB, storeSkuSyncInfo *StoreSkuSyncInfo) (err error)
|
||||
_, err = ExecuteSQL(db, sql, sqlParams)
|
||||
return err
|
||||
}
|
||||
|
||||
func UpdateJdsWareID(db *DaoDB, storeSkuSyncInfo *StoreSkuSyncInfo) (err error) {
|
||||
sql := `
|
||||
UPDATE store_sku_bind
|
||||
SET jds_ware_id = ?
|
||||
WHERE store_id = ?
|
||||
AND sku_id = ?
|
||||
AND deleted_at = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
storeSkuSyncInfo.JdsWareID,
|
||||
storeSkuSyncInfo.StoreID,
|
||||
storeSkuSyncInfo.SkuID,
|
||||
utils.DefaultTimeValue,
|
||||
}
|
||||
_, err = ExecuteSQL(db, sql, sqlParams)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -18,7 +18,8 @@ const (
|
||||
FieldEbaiSyncStatus = "EbaiSyncStatus"
|
||||
FieldMtwmSyncStatus = "MtwmSyncStatus"
|
||||
// FieldWscSyncStatus = "WscSyncStatus"
|
||||
FieldYbSyncStatus = "YbSyncStatus"
|
||||
FieldYbSyncStatus = "YbSyncStatus"
|
||||
FieldJdsSyncStatus = "JdsSyncStatus"
|
||||
|
||||
FieldVendorID = "VendorID"
|
||||
FieldStoreID = "StoreID"
|
||||
|
||||
@@ -20,4 +20,5 @@ type Place struct {
|
||||
EbaiCode int `orm:"index" json:"ebaiCode"`
|
||||
Enabled int8 `json:"enabled"` // 是否启用
|
||||
MtpsPrice int `json:"mtpsPrice"` // 分为单位
|
||||
JdsCode int `json:"jdsCode"` //京东商城代码
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ const (
|
||||
NoCatCatgoryID = 291
|
||||
NOSkuNameImg = "https://image.jxc4.com/noGoodsImg.jpg"
|
||||
SkuNameImgStandard = "?imageMogr2/thumbnail/!800x800r/gravity/Center/crop/800x800"
|
||||
SkuNameImgToPng = "?imageView2/0/format/png/q/75"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -69,39 +70,11 @@ var (
|
||||
SkuNamePrefixNames = []string{
|
||||
"新鲜",
|
||||
"组合菜",
|
||||
"冰鲜",
|
||||
"优",
|
||||
"精",
|
||||
"熟食",
|
||||
"鲜",
|
||||
"净菜",
|
||||
"净",
|
||||
"冻",
|
||||
"半熟",
|
||||
"果切",
|
||||
"熟",
|
||||
"优质",
|
||||
"生",
|
||||
"干货",
|
||||
"快捷菜",
|
||||
"手工厨房",
|
||||
"带壳",
|
||||
"长条",
|
||||
"鲜活宰杀",
|
||||
"惠",
|
||||
"鲜活现杀",
|
||||
"冰冻",
|
||||
"思念",
|
||||
"散装",
|
||||
"优质精品",
|
||||
"干",
|
||||
"湿",
|
||||
"生品",
|
||||
"虾仁",
|
||||
"鲜活现宰",
|
||||
"鲜切",
|
||||
"进口",
|
||||
"冰镇",
|
||||
"预售",
|
||||
"净菜",
|
||||
"非熟食",
|
||||
}
|
||||
|
||||
SpecialUnit = "份"
|
||||
@@ -154,6 +127,7 @@ type SkuCategory struct {
|
||||
EbaiCategoryID int64 `orm:"column(ebai_category_id)" json:"ebaiCategoryID"` // 这个是指对应的饿百商品类别
|
||||
MtwmCategoryID int64 `orm:"column(mtwm_category_id)" json:"mtwmCategoryID"` // 这个是指对应的美团外卖商品类别
|
||||
YbCategoryID int64 `orm:"column(yb_category_id)" json:"ybCategoryID"` // 这个是指对应的银豹商品类别
|
||||
JdsCategoryID int64 `orm:"column(jds_category_id)" json:"jdsCategoryID"` // 这个是指对应的京东商城类别
|
||||
|
||||
// ElmCategoryID int64 `orm:"column(elm_category_id)" json:"elmCategoryID"` // 这个是指对应的饿了么商品类别
|
||||
// WscCategoryID int64 `orm:"column(wsc_category_id)" json:"wscCategoryID"` // 这个是指对应的美团外卖商品类别
|
||||
@@ -165,6 +139,7 @@ type SkuCategory struct {
|
||||
IsExdSpec int `json:"isExdSpec"` //是否是饿鲜达特有新建的分类
|
||||
// JdID int64 `orm:"column(jd_id);index" json:"jdID"` // 这个是指商家自己的商品类别在京东平台上的ID
|
||||
// JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
|
||||
IsSync int `json:"isSync"` //是否同步到平台
|
||||
}
|
||||
|
||||
func (*SkuCategory) TableUnique() [][]string {
|
||||
|
||||
@@ -56,8 +56,12 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
ExdStoreName = "饿鲜达"
|
||||
MatterStoreID = 666666
|
||||
ExdStoreName = "饿鲜达"
|
||||
MatterStoreID = 666666
|
||||
JdShopMainVendorStoreID = "999999"
|
||||
JdShopMainStoreID = 102919
|
||||
|
||||
VendorStoreTel = "18011597879"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -419,9 +423,12 @@ type StoreMap struct {
|
||||
|
||||
SyncStatus int8 `orm:"default(2)" json:"syncStatus"`
|
||||
IsSync int8 `orm:"default(1)" json:"isSync"` // 是否同步
|
||||
SyncRule int8 `orm:"default(0)" json:"syncRule"` //目前用于京东商城晚上的同步规则,0表示关闭,1表示小同步,2表示大同步
|
||||
FakeOpenStart int16 `orm:"default(0)" json:"fakeOpenStart"` // 假开店开始
|
||||
FakeOpenStop int16 `orm:"default(0)" json:"fakeOpenStop"` // 假开店结束
|
||||
JdStoreLevel string `orm:"size(32)" json:"jdStoreLevel"` //京东门店等级
|
||||
JdsStreetCode int `orm:"default(0)" json:"jdsStreetCode"` //京东商城直辖市街道code
|
||||
JdsStreetName string `orm:"size(32)" json:"jdsStreetName"` //京东商城直辖市街道
|
||||
|
||||
IsOrder int `orm:"default(0)" json:"isOrder"` //是否是下预订单门店
|
||||
|
||||
|
||||
@@ -52,8 +52,10 @@ type StoreSkuCategoryMap struct {
|
||||
EbaiSyncStatus int8 `orm:"default(2)"`
|
||||
MtwmSyncStatus int8 `orm:"default(2)"`
|
||||
// WscSyncStatus int8 `orm:"default(2)"`
|
||||
YbID int64 `orm:"column(yb_id);index"`
|
||||
YbSyncStatus int8 `orm:"default(2)"`
|
||||
YbID int64 `orm:"column(yb_id);index"`
|
||||
YbSyncStatus int8 `orm:"default(2)"`
|
||||
JdsID int64 `orm:"column(jds_id);index"`
|
||||
JdsSyncStatus int8 `orm:"default(2)"`
|
||||
}
|
||||
|
||||
func (*StoreSkuCategoryMap) TableUnique() [][]string {
|
||||
@@ -96,9 +98,11 @@ type StoreSkuBind struct {
|
||||
Status int
|
||||
|
||||
// ElmID int64 `orm:"column(elm_id);index"`
|
||||
MtwmID int64 `orm:"column(mtwm_id);index"`
|
||||
EbaiID int64 `orm:"column(ebai_id);index"`
|
||||
YbID int64 `orm:"column(yb_id);index"`
|
||||
MtwmID int64 `orm:"column(mtwm_id);index"`
|
||||
EbaiID int64 `orm:"column(ebai_id);index"`
|
||||
YbID int64 `orm:"column(yb_id);index"`
|
||||
JdsID int64 `orm:"column(jds_id);index"`
|
||||
JdsWareID int64 `orm:"column(jds_ware_id)"`
|
||||
// WscID int64 `orm:"column(wsc_id);index"` // 表示微盟skuId
|
||||
// WscID2 int64 `orm:"column(wsc_id2);index"` // 表示微盟goodsId
|
||||
|
||||
@@ -107,6 +111,7 @@ type StoreSkuBind struct {
|
||||
MtwmSyncStatus int8 `orm:"default(2)"`
|
||||
EbaiSyncStatus int8 `orm:"default(2)"`
|
||||
YbSyncStatus int8 `orm:"default(2)"`
|
||||
JdsSyncStatus int8 `orm:"default(2)"` //京东商城
|
||||
// WscSyncStatus int8 `orm:"default(2)"`
|
||||
|
||||
JdPrice int `json:"jdPrice"`
|
||||
@@ -114,8 +119,10 @@ type StoreSkuBind struct {
|
||||
EbaiPrice int `json:"ebaiPrice"`
|
||||
JxPrice int `json:"jxPrice"`
|
||||
YbPrice int `json:"ybPrice"`
|
||||
JdsPrice int `json:"jdsPrice"`
|
||||
|
||||
JdLockTime *time.Time `orm:"null" json:"jdLockTime"`
|
||||
JdsLockTime *time.Time `orm:"null" json:"jdsLockTime"`
|
||||
MtwmLockTime *time.Time `orm:"null" json:"mtwmLockTime"`
|
||||
EbaiLockTime *time.Time `orm:"null" json:"ebaiLockTime"`
|
||||
JxLockTime *time.Time `orm:"null" json:"jxLockTime"`
|
||||
|
||||
@@ -175,3 +175,22 @@ type UserAgreement struct {
|
||||
IDNumber string `orm:"column(id_number);size(20)" json:"idNumber"`
|
||||
BankNumber string `orm:"size(32)" json:"bankNumber"`
|
||||
}
|
||||
|
||||
type UserOrderSms struct {
|
||||
ID int64 `orm:"column(id)" json:"-"`
|
||||
CreatedAt time.Time `orm:"auto_now_add;type(datetime)" json:"createdAt"`
|
||||
UpdatedAt time.Time `orm:"auto_now;type(datetime)" json:"-"`
|
||||
LastOperator string `orm:"size(32)" json:"-"` // 最后操作员
|
||||
|
||||
Mobile string `orm:"size(32)" json:"mobile"`
|
||||
Name string `orm:"size(32)" json:"name"`
|
||||
VendorUserID string `orm:"column(vendor_user_id)" json:"vendorUserID"`
|
||||
SMSMark int `orm:"column(sms_mark)" json:"smsMark"`
|
||||
TotalCount int `json:"totalCount"`
|
||||
}
|
||||
|
||||
func (*UserOrderSms) TableUnique() [][]string {
|
||||
return [][]string{
|
||||
[]string{"Mobile"},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,6 +147,8 @@ type IPurchasePlatformHandler interface {
|
||||
// Store
|
||||
ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID string) (store *dao.StoreDetail, err error)
|
||||
UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error)
|
||||
CreateStore2(db *dao.DaoDB, storeID int, userName string) (vendorStoreID string, err error)
|
||||
DeleteStore(db *dao.DaoDB, storeID int, userName string) (err error)
|
||||
GetStoreStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string) (storeStatus int, err error)
|
||||
UpdateStoreCustomID(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID string, storeID int64) (err error)
|
||||
|
||||
|
||||
@@ -46,11 +46,12 @@ type StoreSkuInfo struct {
|
||||
|
||||
Seq int `json:"seq,omitempty"`
|
||||
|
||||
ActPrice int64 `json:"actPrice,omitempty"`
|
||||
VendorActID string `json:"vendorActID,omitempty"`
|
||||
IsSpecialty int `json:"isSpecialty,omitempty"`
|
||||
JxPrice int64 `json:"jxPrice,omitempty"`
|
||||
JxUnitPrice int64 `json:"jxUnitPrice,omitempty"`
|
||||
ActPrice int64 `json:"actPrice,omitempty"`
|
||||
VendorActID string `json:"vendorActID,omitempty"`
|
||||
IsSpecialty int `json:"isSpecialty,omitempty"`
|
||||
JxPrice int64 `json:"jxPrice,omitempty"`
|
||||
JxUnitPrice int64 `json:"jxUnitPrice,omitempty"`
|
||||
VendorSkuID2 string `json:"vendorSkuID2,omitempty"`
|
||||
}
|
||||
|
||||
type StoreSkuInfoWithErr struct {
|
||||
|
||||
@@ -61,10 +61,14 @@ var (
|
||||
}
|
||||
)
|
||||
|
||||
func mapDeliveryType(ebaiDeliveryParty int) (deliveryType string) {
|
||||
deliveryType = deliveryTypeMap[ebaiDeliveryParty]
|
||||
if deliveryType == "" {
|
||||
deliveryType = model.OrderDeliveryTypePlatform
|
||||
func mapDeliveryType(ebaiDeliveryParty int, businessType int) (deliveryType string) {
|
||||
if businessType == ebaiapi.DeliveryBusinessTypeZT {
|
||||
return model.OrderDeliveryTypeSelfTake
|
||||
} else {
|
||||
deliveryType = deliveryTypeMap[ebaiDeliveryParty]
|
||||
if deliveryType == "" {
|
||||
deliveryType = model.OrderDeliveryTypePlatform
|
||||
}
|
||||
}
|
||||
return deliveryType
|
||||
}
|
||||
@@ -226,7 +230,7 @@ func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo
|
||||
ActualPayPrice: utils.ForceInterface2Int64(orderMap["user_fee"]),
|
||||
BaseFreightMoney: utils.ForceInterface2Int64(orderMap["send_fee"]),
|
||||
TotalShopMoney: utils.ForceInterface2Int64(orderMap["shop_fee"]),
|
||||
DeliveryType: mapDeliveryType(int(utils.ForceInterface2Int64(orderMap["delivery_party"]))),
|
||||
DeliveryType: mapDeliveryType(int(utils.ForceInterface2Int64(orderMap["delivery_party"])), int(utils.ForceInterface2Int64(orderMap["business_type"]))),
|
||||
|
||||
InvoiceTitle: utils.Interface2String(orderMap["invoice_title"]),
|
||||
InvoiceTaxerID: utils.Interface2String(orderMap["taxer_id"]),
|
||||
|
||||
@@ -375,14 +375,21 @@ func ebaiOpTime2Jx(businessTime interface{}) (opTimeList []int16) {
|
||||
|
||||
func genStoreMapFromStore(store *tEbaiStoreInfo) map[string]interface{} {
|
||||
params := fillOpTimeParams(nil, store.GetOpTimeList())
|
||||
tel := store.Tel1
|
||||
if tel == "" {
|
||||
tel = store.Tel2
|
||||
}
|
||||
if tel != "" {
|
||||
// params["phone"] = tel // 外卖客服联系电话,这个有时能修改,有时不能修改,暂时统一不改
|
||||
params["ivr_phone"] = tel // 订单提醒电话
|
||||
// tel := store.Tel1
|
||||
// if tel == "" {
|
||||
// tel = store.Tel2
|
||||
// }
|
||||
// if tel != "" {
|
||||
// // params["phone"] = tel // 外卖客服联系电话,这个有时能修改,有时不能修改,暂时统一不改
|
||||
// params["ivr_phone"] = tel // 订单提醒电话
|
||||
// }
|
||||
phone := ""
|
||||
if store.MarketManPhone != "" {
|
||||
phone = store.MarketManPhone
|
||||
} else {
|
||||
phone = model.VendorStoreTel
|
||||
}
|
||||
params["ivr_phone"] = phone //统一改为这个电话
|
||||
if store.VendorStoreID != "" {
|
||||
params["baidu_shop_id"] = store.VendorStoreID
|
||||
}
|
||||
@@ -534,3 +541,11 @@ func (c *PurchaseHandler) GetShopIDsByPage() (vendorStoreIDs []string, err error
|
||||
}
|
||||
return vendorStoreIDs, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName string) (vendorStoreID string, err error) {
|
||||
return vendorStoreID, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) DeleteStore(db *dao.DaoDB, storeID int, userName string) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/autonavi"
|
||||
@@ -71,7 +73,7 @@ func (c *PurchaseHandler) updateOrderFinancialInfo(a *jdapi.API, orderID string)
|
||||
if err == nil {
|
||||
if orderSettlement != nil {
|
||||
updateOrderBySettleMent(order, orderSettlement)
|
||||
err = partner.CurOrderManager.UpdateOrderFields(order, []string{ /*"WaybillTipMoney", */ "TotalShopMoney", "PmSubsidyMoney"})
|
||||
err = partner.CurOrderManager.UpdateOrderFields(order, []string{ /*"WaybillTipMoney", */ "TotalShopMoney", "PmSubsidyMoney", "NewEarningPrice"})
|
||||
}
|
||||
}
|
||||
return err
|
||||
@@ -135,6 +137,16 @@ func updateOrderBySettleMent(order *model.GoodsOrder, orderSettlement *jdapi.Ord
|
||||
// order.WaybillTipMoney = orderSettlement.VenderPaidTips
|
||||
order.TotalShopMoney = orderSettlement.SettlementAmount
|
||||
order.PmSubsidyMoney = orderSettlement.PlatOrderGoodsDiscountMoney + orderSettlement.PlatSkuGoodsDiscountMoney
|
||||
if order.TotalShopMoney > 0 {
|
||||
stores, _ := dao.GetStoreList(dao.GetDB(), []int{order.StoreID}, nil, nil, nil, "")
|
||||
if len(stores) > 0 {
|
||||
if stores[0].PayPercentage <= 50 {
|
||||
order.NewEarningPrice = order.TotalShopMoney * int64((100 - stores[0].PayPercentage/2)) / 100
|
||||
} else {
|
||||
order.NewEarningPrice = order.EarningPrice
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -138,10 +138,16 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
|
||||
if err = dao.GetRows(db, &stores, sql, model.VendorIDJD, utils.DefaultTimeValue, storeID); err == nil {
|
||||
for _, store := range stores {
|
||||
a := getAPI(store.VendorOrgCode)
|
||||
phone := ""
|
||||
if store.MarketManPhone != "" {
|
||||
phone = store.MarketManPhone
|
||||
} else {
|
||||
phone = model.VendorStoreTel
|
||||
}
|
||||
storeParams := &jdapi.OpStoreParams{
|
||||
StationNo: store.VendorStoreID,
|
||||
Operator: userName,
|
||||
Phone: store.Tel1,
|
||||
Phone: phone,
|
||||
Mobile: store.Tel2,
|
||||
}
|
||||
if store.SyncStatus&model.SyncFlagDeletedMask == 0 {
|
||||
@@ -167,7 +173,13 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
|
||||
}
|
||||
if store.JdDistrictCode != 0 {
|
||||
storeParams.County = store.JdDistrictCode
|
||||
//TODO 彭州市做特殊处理 2020-05-25
|
||||
if store.JdDistrictCode == 49318 {
|
||||
storeParams.City = 49318
|
||||
storeParams.County = 310045
|
||||
}
|
||||
}
|
||||
|
||||
// storeParams.DeliveryRangeType = store.DeliveryRangeType
|
||||
// if store.DeliveryRangeType == model.DeliveryRangeTypePolygon {
|
||||
// storeParams.CoordinatePoints = store.DeliveryRange
|
||||
@@ -498,3 +510,11 @@ func (c *PurchaseHandler) UpdateStoreCustomID(ctx *jxcontext.Context, vendorOrgC
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName string) (vendorStoreID string, err error) {
|
||||
return vendorStoreID, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) DeleteStore(db *dao.DaoDB, storeID int, userName string) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
11
business/partner/purchase/jdshop/act.go
Normal file
11
business/partner/purchase/jdshop/act.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package jdshop
|
||||
|
||||
import (
|
||||
"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"
|
||||
)
|
||||
|
||||
func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreSkuList []*model.ActStoreSku2) (err error) {
|
||||
return err
|
||||
}
|
||||
35
business/partner/purchase/jdshop/callback.go
Normal file
35
business/partner/purchase/jdshop/callback.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package jdshop
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/jdshopapi"
|
||||
)
|
||||
|
||||
func OnCallbackMsg(msg *jdshopapi.CallBackResult) {
|
||||
fmt.Println("testcallback")
|
||||
// if CurPurchaseHandler != nil {
|
||||
// if msg.Cmd == mtwmapi.MsgTypeStoreStatusChanged {
|
||||
// response = CurPurchaseHandler.onStoreStatusChanged(msg)
|
||||
// } else if msg.Cmd == mtwmapi.MsgTypePrivateNumberDowngrade {
|
||||
// response = CurPurchaseHandler.onNumberDowngrade(msg)
|
||||
// } else {
|
||||
// if orderID := GetOrderIDFromMsg(msg); orderID != "" {
|
||||
// jxutils.CallMsgHandler(func() {
|
||||
// switch msg.Cmd {
|
||||
// case mtwmapi.MsgTypeWaybillStatus:
|
||||
// response = CurPurchaseHandler.onWaybillMsg(msg)
|
||||
// default:
|
||||
// response = CurPurchaseHandler.onOrderMsg(msg)
|
||||
// }
|
||||
// }, jxutils.ComposeUniversalOrderID(orderID, model.VendorIDMTWM))
|
||||
// }
|
||||
// /*if msg.Cmd == mtwmapi.MsgTypeOrderRefund || msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund {
|
||||
// utils.CallFuncAsync(func() {
|
||||
// OnFinancialMsg(msg)
|
||||
// })
|
||||
// } */
|
||||
// }
|
||||
// }
|
||||
// return response
|
||||
}
|
||||
69
business/partner/purchase/jdshop/jds.go
Normal file
69
business/partner/purchase/jdshop/jds.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package jdshop
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/partner"
|
||||
"git.rosy.net.cn/jx-callback/business/partner/putils"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
)
|
||||
|
||||
var (
|
||||
CurPurchaseHandler *PurchaseHandler
|
||||
)
|
||||
|
||||
type PurchaseHandler struct {
|
||||
partner.BasePurchasePlatform
|
||||
putils.DefSingleStorePlatform
|
||||
}
|
||||
|
||||
func init() {
|
||||
if api.JdShopAPI != nil {
|
||||
CurPurchaseHandler = New()
|
||||
partner.RegisterPurchasePlatform(CurPurchaseHandler)
|
||||
}
|
||||
}
|
||||
|
||||
func New() (obj *PurchaseHandler) {
|
||||
obj = new(PurchaseHandler)
|
||||
obj.ISingleStoreStoreSkuHandler = obj
|
||||
return obj
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetVendorID() int {
|
||||
return model.VendorIDJDShop
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) {
|
||||
if globals.EnableJdShopWrite {
|
||||
if imgType > model.ImgTypeLocal {
|
||||
result, err := api.JdShopAPI.UploadPicture(imgData, 0, imgName)
|
||||
if err == nil {
|
||||
imgHint = result.PictureURL
|
||||
}
|
||||
}
|
||||
} else {
|
||||
imgHint = utils.GetUpperUUID()
|
||||
}
|
||||
return imgHint, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCats []*model.SkuVendorCategory, err error) {
|
||||
result, err := api.JdShopAPI.FindVendorCategories()
|
||||
for _, v := range result {
|
||||
cat := &model.SkuVendorCategory{
|
||||
VendorID: model.VendorIDJDShop,
|
||||
Name: v.Name,
|
||||
Level: v.Lev,
|
||||
VendorCategoryID: utils.Int2Str(v.ID),
|
||||
}
|
||||
if v.Lev > 1 {
|
||||
cat.ParentID = utils.Int2Str(v.Fid)
|
||||
cat.IsLeaf = 1
|
||||
}
|
||||
vendorCats = append(vendorCats, cat)
|
||||
}
|
||||
return vendorCats, err
|
||||
}
|
||||
76
business/partner/purchase/jdshop/order.go
Normal file
76
business/partner/purchase/jdshop/order.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package jdshop
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
)
|
||||
|
||||
func (p *PurchaseHandler) AcceptOrRefuseFailedGetOrder(ctx *jxcontext.Context, order *model.GoodsOrder, isAcceptIt bool) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *model.GoodsOrder) {
|
||||
return order
|
||||
}
|
||||
func (p *PurchaseHandler) GetOrder(vendorOrgCode, vendorOrderID string) (order *model.GoodsOrder, err error) {
|
||||
return order, err
|
||||
}
|
||||
func (p *PurchaseHandler) GetOrderStatus(vendorOrgCode, vendorOrderID string) (status int, err error) {
|
||||
return status, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) {
|
||||
return err
|
||||
}
|
||||
func (p *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bool, userName string) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) CallCourier(ctx *jxcontext.Context, order *model.GoodsOrder) (err error) {
|
||||
return err
|
||||
} // 取货失败后再次招唤平台配送
|
||||
func (p *PurchaseHandler) ConfirmReceiveGoods(ctx *jxcontext.Context, order *model.GoodsOrder) (err error) {
|
||||
return err
|
||||
} // 投递失败后确认收到退货
|
||||
func (p *PurchaseHandler) CanSwitch2SelfDeliver(order *model.GoodsOrder) (isCan bool, err error) {
|
||||
return isCan, err
|
||||
}
|
||||
func (p *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) {
|
||||
return err
|
||||
}
|
||||
func (p *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (err error) {
|
||||
return err
|
||||
}
|
||||
func (p *PurchaseHandler) SelfDeliverDelivering(order *model.GoodsOrder, userName string) (err error) {
|
||||
return err
|
||||
}
|
||||
func (p *PurchaseHandler) SelfDeliverDelivered(order *model.GoodsOrder, userName string) (err error) {
|
||||
return err
|
||||
}
|
||||
func (p *PurchaseHandler) GetOrderRealMobile(ctx *jxcontext.Context, order *model.GoodsOrder) (mobile string, err error) {
|
||||
return mobile, err
|
||||
}
|
||||
func (p *PurchaseHandler) ReplyOrderComment(ctx *jxcontext.Context, vendorOrgCode string, orderComment *model.OrderComment, replyComment string) (err error) {
|
||||
return err
|
||||
}
|
||||
func (p *PurchaseHandler) AgreeOrRefuseCancel(ctx *jxcontext.Context, order *model.GoodsOrder, isAgree bool, reason string) (err error) {
|
||||
return err
|
||||
}
|
||||
func (p *PurchaseHandler) CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) {
|
||||
return err
|
||||
}
|
||||
func (p *PurchaseHandler) AdjustOrder(ctx *jxcontext.Context, order *model.GoodsOrder, removedSkuList []*model.OrderSku, reason string) (err error) {
|
||||
return err
|
||||
}
|
||||
func (p *PurchaseHandler) RefundOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) {
|
||||
return err
|
||||
}
|
||||
func (p *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.GoodsOrder, refundSkuList []*model.OrderSku, reason string) (err error) {
|
||||
return err
|
||||
}
|
||||
func (p *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *model.AfsOrder, approveType int, reason string) (err error) {
|
||||
return err
|
||||
}
|
||||
func (p *PurchaseHandler) ConfirmReceivedReturnGoods(ctx *jxcontext.Context, order *model.AfsOrder) (err error) {
|
||||
return err
|
||||
}
|
||||
5
business/partner/purchase/jdshop/order_comment.go
Normal file
5
business/partner/purchase/jdshop/order_comment.go
Normal file
@@ -0,0 +1,5 @@
|
||||
package jdshop
|
||||
|
||||
func (c *PurchaseHandler) StartRefreshComment() {
|
||||
|
||||
}
|
||||
178
business/partner/purchase/jdshop/store.go
Normal file
178
business/partner/purchase/jdshop/store.go
Normal file
@@ -0,0 +1,178 @@
|
||||
package jdshop
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/jdshopapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"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/globals/api"
|
||||
)
|
||||
|
||||
func (p *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID string) (storeDetail *dao.StoreDetail, err error) {
|
||||
// result, err := api.JdShopAPI.NewInfoList(utils.Str2Int64(vendorStoreID))
|
||||
// storeDetail.VendorStoreID = vendorStoreID
|
||||
// storeDetail.Status = JdsStatus2jxStatus(result.StoreStatus)
|
||||
result2, err := api.JdShopAPI.QueryEntityStore(utils.Str2Int64(vendorStoreID))
|
||||
if result2 == nil {
|
||||
return storeDetail, fmt.Errorf("未查询到该平台门店,平台门店ID:[%v]", vendorStoreID)
|
||||
}
|
||||
storeDetail = &dao.StoreDetail{}
|
||||
storeDetail.ID = utils.Str2Int(result2.ExStoreID)
|
||||
storeDetail.Name = result2.StoreName
|
||||
storeDetail.Address = result2.Address
|
||||
storeDetail.Tel1 = result2.Phone
|
||||
storeDetail.DistrictCode = result2.AddrCode
|
||||
zbs := strings.Split(result2.Coordinate, ",")
|
||||
storeDetail.Lat = jxutils.StandardCoordinate2Int(utils.Str2Float64(zbs[0]))
|
||||
storeDetail.Lng = jxutils.StandardCoordinate2Int(utils.Str2Float64(zbs[1]))
|
||||
return storeDetail, err
|
||||
}
|
||||
|
||||
// stoerIDs为nil表示所有
|
||||
func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error) {
|
||||
store, err := dao.GetStoreDetail(db, storeID, model.VendorIDJDShop)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
data, _, err := jxutils.DownloadFileByURL(jdshopapi.JdsStoreImg)
|
||||
timeMap := map[string]string{
|
||||
"businessBeginTime": int2TimeStr(int(store.OpenTime1)),
|
||||
"businessEndTime": int2TimeStr(int(store.CloseTime1)),
|
||||
}
|
||||
timeJSON, _ := json.Marshal(timeMap)
|
||||
updateEntityStoreParam := &jdshopapi.UpdateEntityStoreParam{
|
||||
StoreID: utils.Str2Int(store.VendorStoreID),
|
||||
Name: store.Name,
|
||||
AddCode: store.JdsCode,
|
||||
AddCodeName: store.DistrictName,
|
||||
AddName: store.ProvinceName + store.CityName + store.DistrictName + "@!" + store.Address,
|
||||
Coordinate: utils.Float64ToStr(jxutils.IntCoordinate2Standard(store.Lat)) + "," + utils.Float64ToStr(jxutils.IntCoordinate2Standard(store.Lng)),
|
||||
Phone: store.Tel1,
|
||||
ExtendJSON: string(timeJSON),
|
||||
ImageFile: base64.StdEncoding.EncodeToString(data),
|
||||
CustomerID: utils.Int2Str(store.ID),
|
||||
}
|
||||
if store.JdsStreetCode != 0 {
|
||||
updateEntityStoreParam.AddCode = store.JdsStreetCode
|
||||
}
|
||||
if updateEntityStoreParam.AddCode == 0 {
|
||||
updateEntityStoreParam.AddCode = store.JdCode
|
||||
}
|
||||
err = api.JdShopAPI.UpdateEntityStore(updateEntityStoreParam)
|
||||
if err == nil {
|
||||
// if store.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreStatus) != 0 {
|
||||
// mergeStatus := jxutils.MergeStoreStatus(store.Status, store.VendorStatus)
|
||||
// err = api.JdShopAPI.UpdateStoreStatus(utils.Str2Int(store.VendorStoreID), jxStatus2JdsStatus(mergeStatus))
|
||||
// }
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName string) (vendorStoreID string, err error) {
|
||||
store, err := dao.GetStoreDetail(db, storeID, model.VendorIDJDShop)
|
||||
if err != nil {
|
||||
return vendorStoreID, err
|
||||
}
|
||||
data, _, err := jxutils.DownloadFileByURL(jdshopapi.JdsStoreImg)
|
||||
timeMap := map[string]string{
|
||||
"businessBeginTime": int2TimeStr(int(store.OpenTime1)),
|
||||
"businessEndTime": int2TimeStr(int(store.CloseTime1)),
|
||||
}
|
||||
timeJSON, _ := json.Marshal(timeMap)
|
||||
createEntityStoreParam := &jdshopapi.CreateEntityStoreParam{
|
||||
Name: store.Name,
|
||||
AddCode: store.JdsCode,
|
||||
AddCodeName: store.DistrictName,
|
||||
AddName: store.ProvinceName + store.CityName + store.DistrictName + "@!" + store.Address,
|
||||
Coordinate: utils.Float64ToStr(jxutils.IntCoordinate2Standard(store.Lat)) + "," + utils.Float64ToStr(jxutils.IntCoordinate2Standard(store.Lng)),
|
||||
Phone: store.Tel1,
|
||||
ExtendJSON: string(timeJSON),
|
||||
ImageFile: base64.StdEncoding.EncodeToString(data),
|
||||
CategoryName: jdshopapi.JdsStoreCategoryName,
|
||||
CustomerID: utils.Int2Str(store.ID),
|
||||
}
|
||||
if store.JdsStreetCode != 0 {
|
||||
createEntityStoreParam.AddCode = store.JdsStreetCode
|
||||
}
|
||||
if createEntityStoreParam.AddCode == 0 {
|
||||
createEntityStoreParam.AddCode = store.JdCode
|
||||
}
|
||||
vendorStoreID, err = api.JdShopAPI.CreateEntityStore(createEntityStoreParam)
|
||||
return vendorStoreID, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) DeleteStore(db *dao.DaoDB, storeID int, userName string) (err error) {
|
||||
// store, err := dao.GetStoreDetail(db, storeID, model.VendorIDJDShop)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// err = api.JdShopAPI.DeleteStoresByID(utils.Str2Int64(store.VendorStoreID))
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) {
|
||||
return hint, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetStoreStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string) (storeStatus int, err error) {
|
||||
return storeStatus, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) EnableAutoAcceptOrder(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, isSetEnable bool) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) UpdateStoreStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, status int) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) UpdateStoreOpTime(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, opTimeList []int16) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) GetAllStoresVendorID(ctx *jxcontext.Context, vendorOrgCode string) (vendorStoreIDs []string, err error) {
|
||||
return vendorStoreIDs, err
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) UpdateStoreCustomID(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID string, storeID int64) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func int2TimeStr(time int) (str string) {
|
||||
str += utils.Int2Str(time / 1000)
|
||||
str += utils.Int2Str(time % 1000 / 100)
|
||||
str += ":"
|
||||
str += utils.Int2Str(time % 100 / 10)
|
||||
str += utils.Int2Str(time % 10)
|
||||
return str
|
||||
}
|
||||
|
||||
func jxStatus2JdsStatus(status int) (result int) {
|
||||
if status == model.StoreStatusOpened {
|
||||
result = jdshopapi.JdsStoreStatusOnline
|
||||
} else if status == model.StoreStatusHaveRest || status == model.StoreStatusClosed {
|
||||
result = jdshopapi.JdsStoreStatusRest
|
||||
} else {
|
||||
result = jdshopapi.JdsStoreStatusDisable
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func JdsStatus2jxStatus(status int) (result int) {
|
||||
if status == jdshopapi.JdsStoreStatusOnline {
|
||||
result = model.StoreStatusOpened
|
||||
} else if status == jdshopapi.JdsStoreStatusRest {
|
||||
result = model.StoreStatusClosed
|
||||
} else {
|
||||
result = model.StoreStatusDisabled
|
||||
}
|
||||
return result
|
||||
}
|
||||
758
business/partner/purchase/jdshop/store_sku.go
Normal file
758
business/partner/purchase/jdshop/store_sku.go
Normal file
@@ -0,0 +1,758 @@
|
||||
package jdshop
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/jdshopapi"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/yinbaoapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"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/putils"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
)
|
||||
|
||||
var (
|
||||
sensitiveWordRegexp = regexp.MustCompile(`商品名称中含有敏感词(\[.*\])`)
|
||||
)
|
||||
|
||||
func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||
if globals.EnableJdShopWrite && vendorStoreID == model.JdShopMainVendorStoreID {
|
||||
for _, v := range storeSkuList {
|
||||
//判断京东商城上是否有这个商品了,如果有就是添加规格而不是创建商品
|
||||
name := filterSensitiveWord(v.Name)
|
||||
flag := false
|
||||
result, err := api.JdShopAPI.SearchWare4Valid(name, 1, 100)
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "创建商品")
|
||||
return failedList, err
|
||||
}
|
||||
for _, v := range result.Data {
|
||||
if v.Title == name {
|
||||
flag = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if result.TotalItem > 0 && len(result.Data) > 0 && flag {
|
||||
for _, vv := range v.StoreSkuSyncInfoJds {
|
||||
v.JdsWareID = result.Data[0].WareID
|
||||
vv.JdsWareID = result.Data[0].WareID
|
||||
updateSkusParam, err := buildUpdateSkusParam(v, vv, true)
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "创建商品")
|
||||
return failedList, err
|
||||
}
|
||||
vendorSkuID, err := api.JdShopAPI.UpdateSkus(updateSkusParam)
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "创建商品")
|
||||
return failedList, err
|
||||
}
|
||||
vv.VendorSkuID = vendorSkuID
|
||||
}
|
||||
} else {
|
||||
createSkuParamWare, createSkuParamSkus, err := buildCreateWareParam(v)
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "创建商品")
|
||||
return failedList, err
|
||||
}
|
||||
createSkuResult, err := api.JdShopAPI.CreateWare(createSkuParamWare, createSkuParamSkus)
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "创建商品")
|
||||
return failedList, err
|
||||
} else {
|
||||
//追加商品透图
|
||||
imageURL := ""
|
||||
img := v.Img
|
||||
if img != "" {
|
||||
suffix := img[strings.LastIndex(img, "."):]
|
||||
if suffix != ".png" {
|
||||
if resBinary, _, err := jxutils.DownloadFileByURL(img + model.SkuNameImgToPng); err == nil {
|
||||
downloadURL, err2 := jxutils.UploadExportContent(resBinary, utils.Int64ToStr(time.Now().Unix()))
|
||||
err = err2
|
||||
imageURL, err = uploadImg(downloadURL, name, "tou")
|
||||
}
|
||||
} else {
|
||||
imageURL, err = uploadImg(img, name, "tou")
|
||||
}
|
||||
}
|
||||
err2 := api.JdShopAPI.TransparentImageAdd(createSkuResult.WareID, imageURL)
|
||||
if err2 != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "创建商品")
|
||||
return failedList, err
|
||||
}
|
||||
}
|
||||
var paramAttrs = make(map[string]*jdshopapi.CreateSkuParamSkus)
|
||||
var resultAttrs = make(map[string]int64)
|
||||
for _, vv := range createSkuParamSkus {
|
||||
for _, vvv := range vv.SaleAttrs {
|
||||
paramAttrs[vvv.AttrValues[0]] = vv
|
||||
}
|
||||
}
|
||||
for _, vv1 := range createSkuResult.Skus {
|
||||
for _, vvv1 := range vv1.SaleAttrs {
|
||||
if paramAttrs[vvv1.AttrValues[0]] != nil {
|
||||
resultAttrs[paramAttrs[vvv1.AttrValues[0]].OuterID] = vv1.SkuID
|
||||
}
|
||||
}
|
||||
}
|
||||
for _, vv2 := range v.StoreSkuSyncInfoJds {
|
||||
vv2.JdsWareID = createSkuResult.WareID
|
||||
if resultAttrs[utils.Int2Str(vv2.SkuID)] != 0 {
|
||||
vv2.VendorSkuID = utils.Int64ToStr(resultAttrs[utils.Int2Str(vv2.SkuID)])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return failedList, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||
if globals.EnableJdShopWrite && vendorStoreID == model.JdShopMainVendorStoreID {
|
||||
for _, v := range storeSkuList {
|
||||
name := filterSensitiveWord(v.Name)
|
||||
updateWareParam := &jdshopapi.UpdateWareParam{
|
||||
WareID: v.JdsWareID,
|
||||
Title: name,
|
||||
VenderID: jdshopapi.VenderID,
|
||||
PromiseID: jdshopapi.JdsPromiseID,
|
||||
}
|
||||
var desc string
|
||||
if v.DescImg != "" {
|
||||
pic3, err2 := uploadImg2(v.DescImg, name, "desc")
|
||||
err = err2
|
||||
desc = `<p><img src="` + jdshopapi.JdsImgURL + pic3 + `" style="width: auto; height: auto; max-width: 100%;"><br></p><p><br></p>`
|
||||
} else {
|
||||
desc = `<p><br></p><p><br></p>`
|
||||
}
|
||||
updateWareParam.Introduction = desc
|
||||
updateWareParam.MobileDesc = desc
|
||||
if v.Img != "" {
|
||||
pic1, err2 := uploadImg2(v.Img, name, "1")
|
||||
err = err2
|
||||
err = api.JdShopAPI.ImageUpdate(v.JdsWareID, 1, pic1)
|
||||
if v.Img2 != "" {
|
||||
pic2, err2 := uploadImg2(v.Img2, name, "2")
|
||||
err = err2
|
||||
err = api.JdShopAPI.ImageUpdate(v.JdsWareID, 2, pic2)
|
||||
} else {
|
||||
err = api.JdShopAPI.ImageUpdate(v.JdsWareID, 2, pic1)
|
||||
}
|
||||
|
||||
}
|
||||
var features = []*jdshopapi.CreateSkuParamFeatures{
|
||||
&jdshopapi.CreateSkuParamFeatures{
|
||||
Key: "is7ToReturn", //不支持7天无理由退货
|
||||
Value: "0",
|
||||
},
|
||||
&jdshopapi.CreateSkuParamFeatures{
|
||||
Key: "tssp", //支持自提
|
||||
Value: "4",
|
||||
},
|
||||
// &jdshopapi.CreateSkuParamFeatures{
|
||||
// Key: "fdms", //分单?
|
||||
// Value: "1",
|
||||
// },
|
||||
}
|
||||
updateWareParam.Features = features
|
||||
err = api.JdShopAPI.UpdateWare(updateWareParam)
|
||||
if err == nil {
|
||||
//追加商品透图
|
||||
imageURL := ""
|
||||
img := v.Img
|
||||
if img != "" {
|
||||
suffix := img[strings.LastIndex(img, "."):]
|
||||
if suffix != ".png" {
|
||||
if resBinary, _, err := jxutils.DownloadFileByURL(img + model.SkuNameImgToPng); err == nil {
|
||||
downloadURL, err2 := jxutils.UploadExportContent(resBinary, utils.Int64ToStr(time.Now().Unix()))
|
||||
err = err2
|
||||
imageURL, err = uploadImg(downloadURL, name, "tou")
|
||||
}
|
||||
} else {
|
||||
imageURL, err = uploadImg(img, name, "tou")
|
||||
}
|
||||
}
|
||||
err2 := api.JdShopAPI.TransparentImageAdd(v.JdsWareID, imageURL)
|
||||
if err2 != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "更新商品基础信息")
|
||||
return failedList, err
|
||||
}
|
||||
}
|
||||
for _, vv := range v.StoreSkuSyncInfoJds {
|
||||
updateSkusParam, err := buildUpdateSkusParam(v, vv, false)
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "更新商品基础信息")
|
||||
return failedList, err
|
||||
}
|
||||
vendorSkuID, err := api.JdShopAPI.UpdateSkus(updateSkusParam)
|
||||
vv.VendorSkuID = vendorSkuID
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "更新商品基础信息")
|
||||
}
|
||||
}
|
||||
return failedList, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||
if globals.EnableJdShopWrite && vendorStoreID == model.JdShopMainVendorStoreID {
|
||||
for _, v := range storeSkuList {
|
||||
// err = api.JdShopAPI.DeleteSku(utils.Str2Int64(v.VendorSkuID))
|
||||
err = api.JdShopAPI.UpOrDown(utils.Str2Int64(v.VendorSkuID2), 2)
|
||||
if err == nil {
|
||||
err = api.JdShopAPI.DeleteWare(utils.Str2Int(v.VendorSkuID2))
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "删除商品")
|
||||
}
|
||||
}
|
||||
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) {
|
||||
var (
|
||||
pageNo = 1
|
||||
pageSize = 100
|
||||
)
|
||||
pageResult, err := api.JdShopAPI.SearchWare4Valid("", pageNo, pageSize)
|
||||
for ; pageNo <= pageResult.TotalItem/pageSize+1; pageNo++ {
|
||||
result, err := api.JdShopAPI.SearchWare4Valid("", pageNo, pageSize)
|
||||
if err == nil {
|
||||
for _, v := range result.Data {
|
||||
if skuName := vendorSku2Jx(v); skuName != nil {
|
||||
skuNameList = append(skuNameList, skuName)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return skuNameList, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo, status int) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||
if globals.EnableJdShopWrite {
|
||||
var stock = 0
|
||||
for _, v := range storeSkuList {
|
||||
if status == model.SkuStatusNormal {
|
||||
stock = 9999
|
||||
}
|
||||
if storeID == model.JdShopMainStoreID {
|
||||
err = api.JdShopAPI.UpdateSkuStock(utils.Str2Int(v.VendorSkuID), stock)
|
||||
} else {
|
||||
storeSkus, err2 := dao.GetStoresSkusInfo(dao.GetDB(), []int{model.JdShopMainStoreID}, []int{v.SkuID})
|
||||
err = err2
|
||||
if len(storeSkus) > 0 {
|
||||
if storeSkus[0].JdsID != 0 {
|
||||
err = api.JdShopAPI.UpdateSkuSiteStock(storeSkus[0].JdsID, stock, utils.Str2Int(vendorStoreID))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "修改商品库存")
|
||||
}
|
||||
}
|
||||
return failedList, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||
if globals.EnableJdShopWrite && vendorStoreID == model.JdShopMainVendorStoreID {
|
||||
for _, v := range storeSkuList {
|
||||
err = api.JdShopAPI.UpdateSkuJdPrice(utils.Str2Int(v.VendorSkuID), jxutils.IntPrice2Standard(v.VendorPrice))
|
||||
}
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "修改商品价格")
|
||||
}
|
||||
}
|
||||
return failedList, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||
if globals.EnableJdShopWrite {
|
||||
|
||||
}
|
||||
return failedList, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetStoreAllCategories(ctx *jxcontext.Context, storeID int, vendorStoreID string) (cats []*partner.BareCategoryInfo, err error) {
|
||||
result, err := api.JdShopAPI.FindShopCategories()
|
||||
for _, v := range result {
|
||||
var cat = &partner.BareCategoryInfo{
|
||||
VendorCatID: utils.Int64ToStr(v.CID),
|
||||
Name: v.Name,
|
||||
}
|
||||
if v.ParentCID == 0 {
|
||||
cat.Level = 1
|
||||
} else {
|
||||
cat.Level = 2
|
||||
}
|
||||
cats = append(cats, cat)
|
||||
}
|
||||
return cats, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) {
|
||||
if globals.EnableJdShopWrite && vendorStoreID == model.JdShopMainVendorStoreID {
|
||||
status, err2 := updateOrCreateCategories(storeCat, true)
|
||||
err = err2
|
||||
if status == -1 {
|
||||
return fmt.Errorf("京东商城店内分类创建失败!")
|
||||
}
|
||||
flag := false
|
||||
for {
|
||||
result, err := api.JdShopAPI.FindShopCategories()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, v := range result {
|
||||
if v.Name == storeCat.Name {
|
||||
storeCat.VendorCatID = utils.Int64ToStr(v.CID)
|
||||
flag = true
|
||||
break
|
||||
}
|
||||
}
|
||||
time.Sleep(time.Second * 2)
|
||||
if flag {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) UpdateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) {
|
||||
if globals.EnableJdShopWrite && vendorStoreID == model.JdShopMainVendorStoreID {
|
||||
status, err2 := updateOrCreateCategories(storeCat, false)
|
||||
err = err2
|
||||
if status == -1 {
|
||||
return fmt.Errorf("京东商城店内分类更新失败!")
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) DeleteStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID, vendorCatID string, level int) (err error) {
|
||||
if globals.EnableJdShopWrite && vendorStoreID == model.JdShopMainVendorStoreID {
|
||||
_, err = api.JdShopAPI.DeleteShopCategory(utils.Str2Int64(vendorCatID))
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) IsErrSkuExist(err error) (isExist bool) {
|
||||
return false
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) IsErrCategoryExist(err error) (isExist bool) {
|
||||
return false
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) IsErrCategoryNotExist(err error) (isNotExist bool) {
|
||||
return false
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetStoreSkusBatchSize(funcID int) (batchSize int) {
|
||||
return 1
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetSensitiveWordRegexp() *regexp.Regexp {
|
||||
return sensitiveWordRegexp
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) IsErrSkuNotExist(err error) (isNotExist bool) {
|
||||
return false
|
||||
}
|
||||
|
||||
func ybSkuStatus2Jx(ybStatus int) (jxSkuStatus int) {
|
||||
if ybStatus == yinbaoapi.SkuStatusEnable {
|
||||
jxSkuStatus = model.SkuStatusNormal
|
||||
} else if ybStatus == yinbaoapi.SkuStatusDisabled {
|
||||
jxSkuStatus = model.SkuStatusDontSale
|
||||
} else if ybStatus == yinbaoapi.SkuStatusDeleted {
|
||||
jxSkuStatus = model.SkuStatusDeleted
|
||||
}
|
||||
return jxSkuStatus
|
||||
}
|
||||
|
||||
func vendorSku2Jx(result *jdshopapi.SearchWare4ValidResultData) (skuName *partner.SkuNameInfo) {
|
||||
if result == nil {
|
||||
globals.SugarLogger.Warnf("vendorSku2Jx, strange result:%s", utils.Format4Output(result, true))
|
||||
return nil
|
||||
}
|
||||
// prefix, name, comment, specUnit, unit, specQuality := jxutils.SplitSkuName(result.Title)
|
||||
skuName = &partner.SkuNameInfo{
|
||||
Name: result.Title,
|
||||
VendorNameID: utils.Int64ToStr(result.WareID),
|
||||
Status: result.WareStatus,
|
||||
VendorCatIDList: []string{utils.Int2Str(result.CategoryID)},
|
||||
NameID: utils.Str2Int(result.OuterID),
|
||||
}
|
||||
return skuName
|
||||
}
|
||||
|
||||
func updateOrCreateCategories(storeCat *dao.SkuStoreCatInfo, isCreate bool) (status int64, err error) {
|
||||
var createShopCategoryParams []*jdshopapi.CreateShopCategoryParam
|
||||
result, err := api.JdShopAPI.FindShopCategories()
|
||||
if err != nil {
|
||||
return -1, err
|
||||
}
|
||||
for _, v := range result {
|
||||
createShopCategoryParam := &jdshopapi.CreateShopCategoryParam{
|
||||
HomeShow: "0",
|
||||
ID: utils.Int64ToStr(v.CID),
|
||||
Open: "",
|
||||
OrderNo: utils.Int2Str(v.OrderNo),
|
||||
ParentID: utils.Int64ToStr(v.ParentCID),
|
||||
Title: v.Name,
|
||||
Type: jdshopapi.UpdateCatType,
|
||||
}
|
||||
createShopCategoryParams = append(createShopCategoryParams, createShopCategoryParam)
|
||||
}
|
||||
createShopCategoryParam2 := &jdshopapi.CreateShopCategoryParam{
|
||||
HomeShow: "0",
|
||||
Open: "",
|
||||
OrderNo: utils.Int2Str(storeCat.Seq),
|
||||
ParentID: storeCat.ParentVendorCatID,
|
||||
Title: storeCat.Name,
|
||||
}
|
||||
if isCreate {
|
||||
createShopCategoryParam2.Type = jdshopapi.CreateCatType
|
||||
createShopCategoryParam2.ID = "1"
|
||||
createShopCategoryParams = append(createShopCategoryParams, createShopCategoryParam2)
|
||||
} else {
|
||||
for _, v := range createShopCategoryParams {
|
||||
if v.ID == storeCat.VendorCatID {
|
||||
v.Title = createShopCategoryParam2.Title
|
||||
v.OrderNo = createShopCategoryParam2.OrderNo
|
||||
}
|
||||
}
|
||||
}
|
||||
status, err = api.JdShopAPI.CreateShopCategory(createShopCategoryParams)
|
||||
return status, err
|
||||
}
|
||||
|
||||
func buildCreateWareParam(storeSku *dao.StoreSkuSyncInfo) (createSkuParamWare *jdshopapi.CreateSkuParamWare, createSkuParamSkus []*jdshopapi.CreateSkuParamSkus, err error) {
|
||||
var (
|
||||
images []*jdshopapi.CreateSkuParamImages
|
||||
vendorCatID int
|
||||
)
|
||||
if storeSku.VendorCatID == "0" {
|
||||
resultCat, _ := api.JdShopAPI.FindShopCategories()
|
||||
for _, v := range resultCat {
|
||||
if v.Name == storeSku.CategoryName {
|
||||
vendorCatID = int(v.CID)
|
||||
break
|
||||
}
|
||||
}
|
||||
} else {
|
||||
vendorCatID = utils.Str2Int(storeSku.VendorCatID)
|
||||
}
|
||||
name := filterSensitiveWord(storeSku.Name)
|
||||
createSkuParamWare = &jdshopapi.CreateSkuParamWare{
|
||||
Title: name,
|
||||
ShopCategorys: []int{vendorCatID},
|
||||
CategoryID: int(storeSku.VendorVendorCatID),
|
||||
BrandID: jdshopapi.JxBrandId,
|
||||
// TransportID: jdshopapi.TransportID,
|
||||
WareStatus: 8, //上架待审核
|
||||
OuterID: utils.Int2Str(storeSku.NameID),
|
||||
VenderID: jdshopapi.VenderID,
|
||||
Length: 100,
|
||||
Width: 100,
|
||||
Height: 100,
|
||||
Weight: 0.5,
|
||||
JdPrice: jxutils.IntPrice2Standard(storeSku.UnitPrice),
|
||||
// MarketPrice: jxutils.IntPrice2Standard(storeSku.UnitPrice),
|
||||
PromiseID: jdshopapi.JdsPromiseID,
|
||||
}
|
||||
|
||||
//上传京东图片
|
||||
//规则,有两张就传两张,没有就重复传一张
|
||||
pic1, err := uploadImg(storeSku.Img, name, "1")
|
||||
img1 := &jdshopapi.CreateSkuParamImages{
|
||||
ColorID: "0000000000",
|
||||
ImgIndex: 1,
|
||||
ImgURL: pic1,
|
||||
}
|
||||
img2 := &jdshopapi.CreateSkuParamImages{
|
||||
ColorID: "0000000000",
|
||||
ImgIndex: 2,
|
||||
}
|
||||
if storeSku.Img2 == "" {
|
||||
img2.ImgURL = pic1
|
||||
} else {
|
||||
pic2, err2 := uploadImg(storeSku.Img, name, "2")
|
||||
err = err2
|
||||
img2.ImgURL = pic2
|
||||
}
|
||||
images = append(images, img1)
|
||||
images = append(images, img2)
|
||||
createSkuParamWare.Images = images
|
||||
|
||||
//商品详情拼接
|
||||
var desc string
|
||||
if storeSku.DescImg != "" {
|
||||
pic3, err2 := uploadImg(storeSku.DescImg, name, "desc")
|
||||
err = err2
|
||||
desc = `<p><img src="` + jdshopapi.JdsImgURL + pic3 + `" style="width: auto; height: auto; max-width: 100%;"><br></p><p><br></p>`
|
||||
} else {
|
||||
desc = `<p><br></p><p><br></p>`
|
||||
}
|
||||
createSkuParamWare.MobileDesc = desc
|
||||
createSkuParamWare.Introduction = desc
|
||||
|
||||
//设置商品属性值
|
||||
var (
|
||||
attrIDs = make(map[string]int) //贮存方式,净含量,保质期IDs
|
||||
zctjValueID int64 //贮存条件冷藏0-4的id
|
||||
gcjkValueID int64 //国产,进口的id
|
||||
lbValueID int64 //类别的ID
|
||||
attrsProp []*jdshopapi.CreateSkuParamAttrs
|
||||
)
|
||||
attrs, err := api.JdShopAPI.FindAttrs(int(storeSku.VendorVendorCatID))
|
||||
for _, v := range attrs {
|
||||
if v.Name == "保质期" {
|
||||
attrIDs[v.Name] = v.ID
|
||||
} else if v.Name == "贮存条件" {
|
||||
attrIDs[v.Name] = v.ID
|
||||
} else if v.Name == "净含量" {
|
||||
attrIDs[v.Name] = v.ID
|
||||
} else if v.Name == "规格" {
|
||||
attrIDs[v.Name] = v.ID
|
||||
} else if v.Name == "国产/进口" {
|
||||
attrIDs[v.Name] = v.ID
|
||||
} else if v.Name == "类别" {
|
||||
attrIDs[v.Name] = v.ID
|
||||
}
|
||||
}
|
||||
values, _, err := api.JdShopAPI.FindValuesByAttrId(attrIDs["贮存条件"])
|
||||
for _, v := range values {
|
||||
if v.Name == "冷藏 0-4℃" {
|
||||
zctjValueID = v.ID
|
||||
}
|
||||
}
|
||||
if attrIDs["国产/进口"] != 0 {
|
||||
values2, _, err2 := api.JdShopAPI.FindValuesByAttrId(attrIDs["国产/进口"])
|
||||
err = err2
|
||||
for _, v := range values2 {
|
||||
if v.Name == "国产" {
|
||||
gcjkValueID = v.ID
|
||||
}
|
||||
}
|
||||
attrgcjk := &jdshopapi.CreateSkuParamAttrs{
|
||||
AttrID: utils.Int2Str(attrIDs["国产/进口"]),
|
||||
AttrValues: []string{utils.Int64ToStr(gcjkValueID)},
|
||||
}
|
||||
attrsProp = append(attrsProp, attrgcjk)
|
||||
}
|
||||
attrZctj := &jdshopapi.CreateSkuParamAttrs{
|
||||
AttrID: utils.Int2Str(attrIDs["贮存条件"]),
|
||||
AttrValues: []string{utils.Int64ToStr(zctjValueID)},
|
||||
}
|
||||
attrJhl := &jdshopapi.CreateSkuParamAttrs{
|
||||
AttrID: utils.Int2Str(attrIDs["净含量"]),
|
||||
AttrValues: []string{"0.5"},
|
||||
}
|
||||
attrBzq := &jdshopapi.CreateSkuParamAttrs{
|
||||
AttrID: utils.Int2Str(attrIDs["保质期"]),
|
||||
AttrValues: []string{"5"},
|
||||
}
|
||||
attrsProp = append(attrsProp, attrZctj)
|
||||
attrsProp = append(attrsProp, attrJhl)
|
||||
attrsProp = append(attrsProp, attrBzq)
|
||||
createSkuParamWare.MultiCateProps = attrsProp
|
||||
var features = []*jdshopapi.CreateSkuParamFeatures{
|
||||
&jdshopapi.CreateSkuParamFeatures{
|
||||
Key: "is7ToReturn", //不支持7天无理由退货
|
||||
Value: "0",
|
||||
},
|
||||
&jdshopapi.CreateSkuParamFeatures{
|
||||
Key: "tssp", //支持自提
|
||||
Value: "4",
|
||||
},
|
||||
// &jdshopapi.CreateSkuParamFeatures{
|
||||
// Key: "fdms", //分单?
|
||||
// Value: "1",
|
||||
// },
|
||||
}
|
||||
createSkuParamWare.Features = features
|
||||
//组合sku
|
||||
var vendorPrice int64 = 0
|
||||
for _, v := range storeSku.StoreSkuSyncInfoJds {
|
||||
var (
|
||||
ggValueID int64 //规格的属性id
|
||||
attrsPropSku []*jdshopapi.CreateSkuParamAttrs
|
||||
multiPropSku []*jdshopapi.CreateSkuParamAttrs
|
||||
)
|
||||
valuesSku, maxNo, _ := api.JdShopAPI.FindValuesByAttrId(attrIDs["规格"])
|
||||
specQuality := utils.Float64ToStr(float64(v.SpecQuality)) + v.SpecUnit
|
||||
for _, v := range valuesSku {
|
||||
if v.Name == specQuality {
|
||||
ggValueID = v.ID
|
||||
}
|
||||
}
|
||||
if ggValueID == 0 { //说明没有建这个规格,要建上
|
||||
catID, _ := api.JdShopAPI.SaveVenderAttrValue(specQuality, attrIDs["规格"], int(storeSku.VendorVendorCatID), maxNo+1)
|
||||
ggValueID = catID
|
||||
}
|
||||
attrSku := &jdshopapi.CreateSkuParamAttrs{
|
||||
AttrID: utils.Int2Str(attrIDs["规格"]),
|
||||
AttrValues: []string{utils.Int64ToStr(ggValueID)},
|
||||
}
|
||||
attrsPropSku = append(attrsPropSku, attrSku)
|
||||
sku := &jdshopapi.CreateSkuParamSkus{
|
||||
JdPrice: jxutils.IntPrice2Standard(v.VendorPrice),
|
||||
// StockNum: 9999,
|
||||
Type: "com.jd.pop.ware.ic.api.domain.sku",
|
||||
Type2: "com.jd.pop.ware.ic.api.domain.Sku",
|
||||
OuterID: utils.Int2Str(v.SkuID),
|
||||
}
|
||||
sku.SaleAttrs = attrsPropSku
|
||||
if attrIDs["类别"] != 0 {
|
||||
values2, _, err2 := api.JdShopAPI.FindValuesByAttrId(attrIDs["类别"])
|
||||
err = err2
|
||||
lbValueID = values2[len(values2)-1].ID
|
||||
attrlb := &jdshopapi.CreateSkuParamAttrs{
|
||||
AttrID: utils.Int2Str(attrIDs["类别"]),
|
||||
AttrValues: []string{utils.Int64ToStr(lbValueID)},
|
||||
}
|
||||
multiPropSku = append(multiPropSku, attrlb)
|
||||
}
|
||||
sku.MultiCateProps = multiPropSku
|
||||
createSkuParamSkus = append(createSkuParamSkus, sku)
|
||||
|
||||
if v.VendorPrice > vendorPrice {
|
||||
vendorPrice = v.VendorPrice
|
||||
}
|
||||
if v.Status == model.SkuStatusNormal {
|
||||
sku.StockNum = 9999
|
||||
} else {
|
||||
sku.StockNum = 0
|
||||
}
|
||||
}
|
||||
//市场价固定500
|
||||
createSkuParamWare.MarketPrice = 500
|
||||
return createSkuParamWare, createSkuParamSkus, err
|
||||
}
|
||||
|
||||
//京东商城上传图片,若平台上已经有了这个图就直接拿来用了
|
||||
func uploadImg(img, name, index string) (imgURL string, err error) {
|
||||
result, err := api.JdShopAPI.QueryPicture(name + index)
|
||||
if len(result) > 0 {
|
||||
imgURL = result[0].PictureURL
|
||||
} else {
|
||||
data, _, err := jxutils.DownloadFileByURL(img)
|
||||
if err != nil {
|
||||
return imgURL, err
|
||||
}
|
||||
uploadResult, err := api.JdShopAPI.UploadPicture(data, 0, name+index)
|
||||
if err != nil {
|
||||
return imgURL, err
|
||||
}
|
||||
imgURL = uploadResult.PictureURL
|
||||
}
|
||||
return imgURL, err
|
||||
}
|
||||
|
||||
func uploadImg2(img, name, index string) (imgURL string, err error) {
|
||||
data, _, err := jxutils.DownloadFileByURL(img)
|
||||
if err != nil {
|
||||
return imgURL, err
|
||||
}
|
||||
uploadResult, err := api.JdShopAPI.UploadPicture(data, 0, name+index)
|
||||
if err != nil {
|
||||
return imgURL, err
|
||||
}
|
||||
imgURL = uploadResult.PictureURL
|
||||
return imgURL, err
|
||||
}
|
||||
|
||||
func filterSensitiveWord(name string) (result string) {
|
||||
for _, v := range jdshopapi.SensitiveWordMap {
|
||||
if strings.Contains(name, v) {
|
||||
return strings.ReplaceAll(name, v, "")
|
||||
}
|
||||
}
|
||||
return name
|
||||
}
|
||||
|
||||
func buildUpdateSkusParam(storeSku *dao.StoreSkuSyncInfo, v *dao.StoreSkuSyncInfo, isCreate bool) (updateSkusParam *jdshopapi.UpdateSkusParam, err error) {
|
||||
updateSkusParam = &jdshopapi.UpdateSkusParam{
|
||||
WareID: storeSku.JdsWareID,
|
||||
}
|
||||
attrIDs := make(map[string]int)
|
||||
attrs, err := api.JdShopAPI.FindAttrs(int(storeSku.VendorVendorCatID))
|
||||
for _, v := range attrs {
|
||||
if v.Name == "规格" {
|
||||
attrIDs[v.Name] = v.ID
|
||||
} else if v.Name == "类别" {
|
||||
attrIDs[v.Name] = v.ID
|
||||
}
|
||||
}
|
||||
var (
|
||||
ggValueID int64 //规格的属性id
|
||||
attrsPropSku []*jdshopapi.CreateSkuParamAttrs
|
||||
skus []*jdshopapi.UpdateSkusParamSkus
|
||||
multiPropSku []*jdshopapi.CreateSkuParamAttrs
|
||||
)
|
||||
valuesSku, maxNo, _ := api.JdShopAPI.FindValuesByAttrId(attrIDs["规格"])
|
||||
specQuality := utils.Float64ToStr(float64(v.SpecQuality)) + v.SpecUnit
|
||||
for _, v := range valuesSku {
|
||||
if v.Name == specQuality {
|
||||
ggValueID = v.ID
|
||||
}
|
||||
}
|
||||
if ggValueID == 0 { //说明没有建这个规格,要建上
|
||||
catID, _ := api.JdShopAPI.SaveVenderAttrValue(specQuality, attrIDs["规格"], int(storeSku.VendorVendorCatID), maxNo+1)
|
||||
ggValueID = catID
|
||||
}
|
||||
attrSku := &jdshopapi.CreateSkuParamAttrs{
|
||||
AttrID: utils.Int2Str(attrIDs["规格"]),
|
||||
AttrValues: []string{utils.Int64ToStr(ggValueID)},
|
||||
}
|
||||
attrsPropSku = append(attrsPropSku, attrSku)
|
||||
sku := &jdshopapi.UpdateSkusParamSkus{
|
||||
WareID: storeSku.JdsWareID,
|
||||
JdPrice: jxutils.IntPrice2Standard(v.VendorPrice),
|
||||
Type: "com.jd.pop.ware.ic.api.domain.sku",
|
||||
Type2: "com.jd.pop.ware.ic.api.domain.Sku",
|
||||
OuterID: utils.Int2Str(v.SkuID),
|
||||
}
|
||||
sku.SaleAttrs = attrsPropSku
|
||||
if v.Status == model.SkuStatusNormal {
|
||||
sku.StockNum = "9999"
|
||||
} else {
|
||||
sku.StockNum = "0"
|
||||
}
|
||||
if !isCreate {
|
||||
result, err2 := api.JdShopAPI.FindSkuById(utils.Str2Int64(v.VendorSkuID))
|
||||
err = err2
|
||||
if specQuality != result.SaleAttrs[0].AttrValueAlias[0] {
|
||||
api.JdShopAPI.DeleteSku(utils.Str2Int64(v.VendorSkuID))
|
||||
}
|
||||
}
|
||||
if attrIDs["类别"] != 0 {
|
||||
values2, _, err2 := api.JdShopAPI.FindValuesByAttrId(attrIDs["类别"])
|
||||
err = err2
|
||||
lbValueID := values2[len(values2)-1].ID
|
||||
attrlb := &jdshopapi.CreateSkuParamAttrs{
|
||||
AttrID: utils.Int2Str(attrIDs["类别"]),
|
||||
AttrValues: []string{utils.Int64ToStr(lbValueID)},
|
||||
}
|
||||
multiPropSku = append(multiPropSku, attrlb)
|
||||
}
|
||||
sku.MultiCateProps = multiPropSku
|
||||
skus = append(skus, sku)
|
||||
updateSkusParam.Skus = skus
|
||||
return updateSkusParam, err
|
||||
}
|
||||
@@ -151,8 +151,10 @@ var (
|
||||
6039390: 200,
|
||||
}
|
||||
|
||||
regexpCnameAndCmobile = regexp.MustCompile(`配送员,(.*),手机号,(.*)`)
|
||||
bagSkuMap = map[int]int{ //京西物料袋子skuid
|
||||
regexpCnameAndCmobile = regexp.MustCompile(`配送员,(.*),手机号,(.*)`)
|
||||
regexpCnameAndCmobile2 = regexp.MustCompile(`(快递员:(.*),联系电话:(.*))`)
|
||||
|
||||
bagSkuMap = map[int]int{ //京西物料袋子skuid
|
||||
6039382: 6039382,
|
||||
6039383: 6039383,
|
||||
6039384: 6039384,
|
||||
@@ -336,6 +338,11 @@ func GetAvailableDeliverTime(ctx *jxcontext.Context, storeID int) (deliverTimerL
|
||||
}
|
||||
beginDate = beginDate.Add(24 * time.Hour)
|
||||
}
|
||||
if len(deliverTimerList) > 0 {
|
||||
if deliverTimerList[0].TimeList[0].UnixTime != 0 {
|
||||
deliverTimerList[0].TimeList[0].ViewTime = "营业即送"
|
||||
}
|
||||
}
|
||||
return deliverTimerList, err
|
||||
}
|
||||
|
||||
@@ -1477,8 +1484,16 @@ func updateJdWayBillInfo(db *dao.DaoDB, order *model.GoodsOrder, getTrackMessage
|
||||
for _, vv := range getTrackMessagePlusByOrderResult.ResultData {
|
||||
if vv.OpeTitle == "配送员收货" {
|
||||
result := regexpCnameAndCmobile.FindAllStringSubmatch(vv.OpeRemark, -1)
|
||||
cName = result[0][1]
|
||||
cMobile = result[0][2]
|
||||
if len(result) > 0 {
|
||||
cName = result[0][1]
|
||||
cMobile = result[0][2]
|
||||
} else {
|
||||
result2 := regexpCnameAndCmobile2.FindAllStringSubmatch(vv.OpeRemark, -1)
|
||||
if len(result2) > 0 {
|
||||
cName = result2[0][1]
|
||||
cMobile = result2[0][2]
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
@@ -396,8 +396,14 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *mtwmapi.CallbackMsg) (orderSta
|
||||
if msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund {
|
||||
if notifyType == mtwmapi.NotifyTypePartyApply {
|
||||
if globals.EnableMtwmStoreWrite {
|
||||
// api.MtwmAPI.OrderRefundReject(utils.Str2Int64(orderID), "请联系商户,让商户发起订单调整") // todo 京东与饿百都没有售前用户提出订单调整的,自动拒绝调整单
|
||||
api.MtwmAPI.OrderRefundAgree(utils.Str2Int64(orderID), "自动确认退款")
|
||||
goods, err := dao.GetSimpleOrder(dao.GetDB(), orderID)
|
||||
if err == nil {
|
||||
if goods.Status < model.OrderStatusDelivering {
|
||||
api.MtwmAPI.OrderRefundAgree(utils.Str2Int64(orderID), "自动确认退款")
|
||||
} else {
|
||||
api.MtwmAPI.OrderRefundReject(utils.Str2Int64(orderID), "商品配送中,请联系门店。") // todo 京东与饿百都没有售前用户提出订单调整的,自动拒绝调整单
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if notifyType == mtwmapi.NotifyTypeSuccess {
|
||||
vendorStatus = fakeOrderAdjustFinished
|
||||
|
||||
@@ -96,6 +96,14 @@ func (p *PurchaseHandler) CreateStore(db *dao.DaoDB, storeID int, userName strin
|
||||
return p.UpdateStore(db, storeID, userName)
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName string) (vendorStoreID string, err error) {
|
||||
return vendorStoreID, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) DeleteStore(db *dao.DaoDB, storeID int, userName string) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error) {
|
||||
var name string
|
||||
if db == nil {
|
||||
@@ -122,12 +130,19 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
|
||||
// }
|
||||
}
|
||||
// openLevel, isOnline := bizStatusJX2Mtwm(mergedStoreStatus)
|
||||
//TODO 美团暂时不用那个电话
|
||||
phone := storeDetail.Tel1
|
||||
// if storeDetail.MarketManPhone != "" {
|
||||
// phone = storeDetail.MarketManPhone
|
||||
// } else {
|
||||
// phone = model.VendorStoreTel
|
||||
// }
|
||||
params := map[string]interface{}{
|
||||
"name": name, //jxutils.ComposeStoreName(storeDetail.Store.Name, model.VendorIDMTWM),
|
||||
"address": storeDetail.Address, // 美团好像地址也不能改的?
|
||||
"longitude": jxutils.IntCoordinate2Standard(int(remoteStoreInfo.Longitude)),
|
||||
"latitude": jxutils.IntCoordinate2Standard(int(remoteStoreInfo.Latitude)),
|
||||
"phone": storeDetail.Tel1,
|
||||
"phone": phone,
|
||||
"shipping_fee": remoteStoreInfo.ShippingFee,
|
||||
"shipping_time": remoteStoreInfo.ShippingTime,
|
||||
"open_level": remoteStoreInfo.OpenLevel,
|
||||
|
||||
@@ -246,7 +246,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
syncType = "更新商品"
|
||||
}
|
||||
for i, storeSku := range storeSkuList {
|
||||
isNeedUpdatePrice := isCreate //storeSku.SkuSyncStatus&( model.SyncFlagPriceMask| model.SyncFlagNewMask) != 0
|
||||
// isNeedUpdatePrice := isCreate //storeSku.SkuSyncStatus&( model.SyncFlagPriceMask| model.SyncFlagNewMask) != 0
|
||||
foodData := make(map[string]interface{})
|
||||
foodDataList[i] = foodData
|
||||
foodData[mtwmapi.KeyAppFoodCode] = utils.Int2Str(storeSku.SkuID)
|
||||
@@ -258,9 +258,9 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
foodData["skus"] = skus
|
||||
foodData["name"] = utils.LimitUTF8StringLen(utils.FilterEmoji(storeSku.SkuName), mtwmapi.MaxSkuNameCharCount)
|
||||
foodData["description"] = storeSku.Comment
|
||||
if isNeedUpdatePrice {
|
||||
foodData["price"] = jxutils.IntPrice2Standard(storeSku.VendorPrice)
|
||||
}
|
||||
// if isNeedUpdatePrice {
|
||||
foodData["price"] = jxutils.IntPrice2Standard(storeSku.VendorPrice)
|
||||
// }
|
||||
foodData["min_order_count"] = 1
|
||||
foodData["unit"] = storeSku.Unit
|
||||
foodData["box_num"] = 1
|
||||
@@ -291,9 +291,9 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
// foodData["tag_id"] = utils.Int64ToStr(defVendorCatID)
|
||||
}
|
||||
skus[0]["spec"] = jxutils.ComposeSkuSpec(storeSku.SpecQuality, storeSku.SpecUnit)
|
||||
if isNeedUpdatePrice {
|
||||
skus[0]["price"] = foodData["price"]
|
||||
}
|
||||
// if isNeedUpdatePrice {
|
||||
skus[0]["price"] = foodData["price"]
|
||||
// }
|
||||
skus[0]["stock"] = stockCount2Mtwm(model.MaxStoreSkuStockQty)
|
||||
if storeSku.Upc != "" {
|
||||
skus[0]["upc"] = storeSku.Upc
|
||||
|
||||
@@ -15,6 +15,14 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName string) (vendorStoreID string, err error) {
|
||||
return vendorStoreID, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) DeleteStore(db *dao.DaoDB, storeID int, userName string) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) {
|
||||
return hint, err
|
||||
}
|
||||
|
||||
@@ -31,7 +31,10 @@ enableEbaiStoreWrite = false
|
||||
enableElmStoreWrite = false
|
||||
enableMtwmStoreWrite = false
|
||||
enableWscStoreWrite = false
|
||||
enableYbStoreWrite = true
|
||||
enableYbStoreWrite = false
|
||||
enableJdShopWrite = false
|
||||
|
||||
jdsCookie = "shshshfpa=13b38d4a-8ba0-df12-0012-82d9a37fb835-1573795914; shshshfpb=abYp8Dq5JobRtp2pkZa7MbA%3D%3D; __jdu=1142616513; pinId=WMIzMhF5BfL6nJp9AcA2-A; pin=shop_jxcs; unick=shop_jxcs; _tp=7FBEvLyPe%2FKcgxsfY5lRgA%3D%3D; _pst=shop_jxcs; areaId=22; ipLoc-djd=22-1930-50948-57092; user-key=3ec204b4-f204-4320-98e3-b2569c757800; cn=0; shshshfp=5d23828ee6ea3a33e1a58588db1713f8; 3AB9D23F7A4B3C9B=AK36FFYF5J6WMPRH7YTXMEX4CATHR6NAA3IQEESU2I33FEJRQ3DRLU4SZJYD2XGFLCFW43DHYP5HQKOMR4EFQSLKLA; navigation=[%22shop_jxcs%22]; __jdv=122270672|baidu|-|organic|not set|1589514011252; language=zh_CN; ceshi3.com=000; csrf_token=b84d0a5c-6288-4db4-84e1-cadf66be3bf7; mba_muid=1142616513; TrackID=1qvZk-6QSAOp1NmaouJGEx58_cFglCFv57HEfoHOezMrOnV3_FSK-5ExeYhHx97IltBADG3dvJqLIt3P57wyUW4Z2Q3Y8ITo8Cfdmlz3kykM; RT="z=1&dm=jd.com&si=mcot45862q&ss=kaf1rcqz&sl=2&tt=38t&ld=22qx&nu=b99e5a7f32b36f184614d34a1d926a39&cl=3clu&ul=3crs&hd=3cz3"; b-sec=S2JWP6CAFP7K4I6PXVBUVCO6YVXUX2JAPDHLX5RZUDE4YKCGOEXJIINB3Q4THCFCMVWZPFAYGLWLG; thor=80FAF09E9A09B6E618A68057BDFCFCB8C86E8252DC9F7D3B34572625904FBA0AB6BF053A5325612EC0407791BB05F5301356E71E8B282C40C06D0B5DF3439DEECB102A78FAFF7AC0FC4E2D1FA8DD8BBAE1A011E50B5C74F1870AD982D7BF453F470F31F2241B73AC4C25485025C2ABEBC8A538AF7257824D2FAEE300A1435175B0B451FB5C19B78D729FC83152CA3BAF; _vender_=TNK3O6PALVQGGA33SGBIUTOKL4OOE6DP6OMNVIPMAMULGTRFWUMTVWGFRUTYP4L4EPN3KP73P33BOBN5SNJFBNQB5OMQYSJ5MORGQLJS7QAPOMIN7AZD6B3ZLP2DV4JCXDI5P3KOXJ3PHLIIRZ2YVS4JSSA3JRSBACNLJSC24ELO46GIMRW53XGW36EBPLZMZP2MQCAMJNO44FKT46B7VDVT7KQTELESOOF6E377AYC3NWKQF6ICIYBW4BA4JL5QG2NHGNOHOUJDNUW3N22UF32DLFLEIQGVO2W55J6AKPPBT227XA5NO4S3NFVIUUUADGOYH56T72MTNXCILWVMN4RMUNVFMGL4ISGXJS7YILE7A2ESPAU43MISAOZM2BR53MGRB5OZSQZPV5DBDCN2OVVT3XT5N2VMFELARQNTMAJCDBGXFURSN2Q7SYULLKZEZHTYWWOI65LS5OIHLUZQKWFGMNSQF2UBSYV7FG46CWJGMVHOGV3FY4RUEVJK6BQ223QK3H3VMTHXCZOZV4GKR5EWGIZZDVUAK4B36BPA5HPBO7PXKBOEXEBX77IYBNQLCGMK72J4VKNOUPYKNB5JE5D5UN3R2MMFGLJARTL2QTC5ZRZ4PJCJZWWOV37VWLWFVAN5IGHPAYME73KTNFABM5W73XLOXJFQWTFRZEK3FCL3BLRV4UOXLBQGA34R4WUBYSZURMKTXXB7U; __jda=65775340.1142616513.1573036516.1589946171.1589952725.54; __jdb=65775340.147.1142616513|54.1589952725; __jdc=65775340; _base_=YKH2KDFHMOZBLCUV7NSRBWQUJPBI7JIMU5R3EFJ5UDHJ5LCU7R2NILKK5UJ6GLA2RGYT464UKXAI4Z6HPCTN4UQM3WHVQ4ENFP57OC2DC7JQLRXRUO5PW6B77O6UXAZ4TCNE6YVKRXISVLBYGYO44RCDDPWDA4AEL7ZLXI2SG4SOQWCP5WPWO6EFS7HEHMRWVKBRVHB33TFD4SMNBHRJCTDFHU6SZXCZD6RFXX2OORYGL5H2GYF2IIH2KKD4T72IR4F577G2E5II2OMMXYF2GDYNTS7WGAUXFEWRJ3CTKDBDWMHUKJQF4ZFOTNBBYBIZRXZYERXXIG6ATJFKID7XOR3NQ2CL6K7A2IEZV5HCBNYDPXFCM2ZMCS474KZ44S5F; _vender_new_=GI63BGTJFDBQ46CD7JXUX3HEPM4P5LEA3TJTFGW4ZGGIVOLTPK5T25EXTBLCENPUTR7E2I23YDFQ4ARO6JW3NHSWBDE73RTUKJTADIPFPLYFE3ARGJUBPHWUIONS72KRQOZC5P7PB4VPPLRHGEP7L3Z5K62L2E2MGTWHFJRQ3CAVBDYVW2Z4J6U73HW4BKKOCDAH5T6OJJKWKLBZFOTI7342QSL7YQ2E3I4T777RNZF23XGOTCP3D4INHNO5MNKT3XJZQBVHWUVZYQUXCK5QQTKWADKQUCYV3JRY6YAYOD7Z5IIKGNLREQTCPO7SYGSIS655JUGOUILFLXVZE6KCFG7ZTPRUD6VPE4KCIE4OUZSED6FTSEZHTM363E7XXCHB4NA7VLZHCQSBHDVGMRA7RM4RGJC3MOI4TJNGCLW6QKUCCZAY7XTGOTMC53TFUYERGNIH2RBULZ7UTZH5GU3TC6RWFI2QL4QTAIARA6GNVXENEOYIPZEHN222YDAJX5OBBEECAMAPNKZ3XNF5CNGDJ3DSU2ZLOCAKLFPCYTIIWPPJMCQ636F5464HS4OVFPFNIDW4OCE23JRPYP5FAL6TKHPAC3H3ZRU7WA5GKJJKBZUGIX7NEO4LZB7FJ3RZZZH3UHPQMNILD5DT2V7HVCUOVNOFBEOW5ID2ZMQ3XV264IU4MYHN64RA; _BELONG_CLIENT_=WPSC4XJXWK5USS4JNZY2X7VRLR5MCBKRSVHEXABGTHDGISIQK5YOLZUXYE7IOIM7MOKO74H6CRN6WHAAR4TMDV3XZWMXZRCRT5XRNE3V356BTOB2Y7LPK66VWQK6HPTGWVXIDXDCPVE3W5WMHAIO6AT2LX2XXVNUCXR34ZWFK6HY45CORGIKOSYDYZBF27WOKTUX6BS4FZMIJWNUX6CB4JAA25ZLF7ZEKYOO4QV5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BMTUJZACIBHXQFAVLRF76VQY5PNJGGJNBEZHSFYYJA3YORRT7FB5AHCOIFQKF3W5RWNUX6CB4JAA26JNMO7AYWNUPZF5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BWZDKMOJ5BS6II53ERY6ALV3ZWPF42L4CPUHEGPYIII35KDC4FCNVCORCXFD6IVNLBEDPB2GGP4UHWNRUDOQBDIW7RZJXBA2WV5ANZOTEGUCDWYRVQS2YUTIZNZ276PRYG4N56V6YTII7MBKBC7LYHO7C555HTSBXGNRM3E466AYN67DHWVM5HQFJ4NFDO5BTOKMOS5L2CXFVYDR2FCOILVYPEI; _lvtc_=5ZH3OJ7CWYNVGEKDRC32XTFXGY"
|
||||
|
||||
aliKey = "LTAI4FwZN7pp4dACQHoapkZQ"
|
||||
aliSecret = "NTegceUFX0FdfMovqCDzqcIKmhcoOu"
|
||||
@@ -125,6 +128,7 @@ smsSignName = "京西菜市"
|
||||
smsMobileVerifyTemplate = "SMS_175583158"
|
||||
smsNewOrderTemplate = "SMS_175583150"
|
||||
smsOrderCanceledTemplate = "SMS_175573134"
|
||||
smsNewUserOrderTemplate = "SMS_190284055"
|
||||
|
||||
addEvent = true
|
||||
|
||||
@@ -181,6 +185,11 @@ jdEclpAccessToken = "bcb6201b5b3c45a0976dcda5e2dea8aejiwm"
|
||||
jdEclpAppKey = "0D397F05CF11C51BCDCC81744680EBC3"
|
||||
jdEclpAppSecret = "f16a5e57ff4f4f428b702c40d2d4b933"
|
||||
|
||||
jdShopAccessToken = "de8157b447584885910f429011e49cb93yjq"
|
||||
jdShopAppKey = "E1D746D42474D5F1F1A10CECE75D99F6"
|
||||
jdShopAppSecret = "efa7e1d1a22640fa990e6cf164b28608"
|
||||
jdsCookie = "shshshfpa=13b38d4a-8ba0-df12-0012-82d9a37fb835-1573795914; shshshfpb=abYp8Dq5JobRtp2pkZa7MbA%3D%3D; __jdu=1142616513; pinId=WMIzMhF5BfL6nJp9AcA2-A; pin=shop_jxcs; unick=shop_jxcs; _tp=7FBEvLyPe%2FKcgxsfY5lRgA%3D%3D; _pst=shop_jxcs; areaId=22; ipLoc-djd=22-1930-50948-57092; user-key=3ec204b4-f204-4320-98e3-b2569c757800; cn=0; shshshfp=5d23828ee6ea3a33e1a58588db1713f8; 3AB9D23F7A4B3C9B=AK36FFYF5J6WMPRH7YTXMEX4CATHR6NAA3IQEESU2I33FEJRQ3DRLU4SZJYD2XGFLCFW43DHYP5HQKOMR4EFQSLKLA; navigation=[%22shop_jxcs%22]; __jdv=122270672|baidu|-|organic|not set|1589514011252; language=zh_CN; ceshi3.com=000; csrf_token=b84d0a5c-6288-4db4-84e1-cadf66be3bf7; mba_muid=1142616513; TrackID=1qvZk-6QSAOp1NmaouJGEx58_cFglCFv57HEfoHOezMrOnV3_FSK-5ExeYhHx97IltBADG3dvJqLIt3P57wyUW4Z2Q3Y8ITo8Cfdmlz3kykM; RT="z=1&dm=jd.com&si=mcot45862q&ss=kaf1rcqz&sl=2&tt=38t&ld=22qx&nu=b99e5a7f32b36f184614d34a1d926a39&cl=3clu&ul=3crs&hd=3cz3"; b-sec=S2JWP6CAFP7K4I6PXVBUVCO6YVXUX2JAPDHLX5RZUDE4YKCGOEXJIINB3Q4THCFCMVWZPFAYGLWLG; thor=80FAF09E9A09B6E618A68057BDFCFCB8C86E8252DC9F7D3B34572625904FBA0AB6BF053A5325612EC0407791BB05F5301356E71E8B282C40C06D0B5DF3439DEECB102A78FAFF7AC0FC4E2D1FA8DD8BBAE1A011E50B5C74F1870AD982D7BF453F470F31F2241B73AC4C25485025C2ABEBC8A538AF7257824D2FAEE300A1435175B0B451FB5C19B78D729FC83152CA3BAF; _vender_=TNK3O6PALVQGGA33SGBIUTOKL4OOE6DP6OMNVIPMAMULGTRFWUMTVWGFRUTYP4L4EPN3KP73P33BOBN5SNJFBNQB5OMQYSJ5MORGQLJS7QAPOMIN7AZD6B3ZLP2DV4JCXDI5P3KOXJ3PHLIIRZ2YVS4JSSA3JRSBACNLJSC24ELO46GIMRW53XGW36EBPLZMZP2MQCAMJNO44FKT46B7VDVT7KQTELESOOF6E377AYC3NWKQF6ICIYBW4BA4JL5QG2NHGNOHOUJDNUW3N22UF32DLFLEIQGVO2W55J6AKPPBT227XA5NO4S3NFVIUUUADGOYH56T72MTNXCILWVMN4RMUNVFMGL4ISGXJS7YILE7A2ESPAU43MISAOZM2BR53MGRB5OZSQZPV5DBDCN2OVVT3XT5N2VMFELARQNTMAJCDBGXFURSN2Q7SYULLKZEZHTYWWOI65LS5OIHLUZQKWFGMNSQF2UBSYV7FG46CWJGMVHOGV3FY4RUEVJK6BQ223QK3H3VMTHXCZOZV4GKR5EWGIZZDVUAK4B36BPA5HPBO7PXKBOEXEBX77IYBNQLCGMK72J4VKNOUPYKNB5JE5D5UN3R2MMFGLJARTL2QTC5ZRZ4PJCJZWWOV37VWLWFVAN5IGHPAYME73KTNFABM5W73XLOXJFQWTFRZEK3FCL3BLRV4UOXLBQGA34R4WUBYSZURMKTXXB7U; __jda=65775340.1142616513.1573036516.1589946171.1589952725.54; __jdb=65775340.147.1142616513|54.1589952725; __jdc=65775340; _base_=YKH2KDFHMOZBLCUV7NSRBWQUJPBI7JIMU5R3EFJ5UDHJ5LCU7R2NILKK5UJ6GLA2RGYT464UKXAI4Z6HPCTN4UQM3WHVQ4ENFP57OC2DC7JQLRXRUO5PW6B77O6UXAZ4TCNE6YVKRXISVLBYGYO44RCDDPWDA4AEL7ZLXI2SG4SOQWCP5WPWO6EFS7HEHMRWVKBRVHB33TFD4SMNBHRJCTDFHU6SZXCZD6RFXX2OORYGL5H2GYF2IIH2KKD4T72IR4F577G2E5II2OMMXYF2GDYNTS7WGAUXFEWRJ3CTKDBDWMHUKJQF4ZFOTNBBYBIZRXZYERXXIG6ATJFKID7XOR3NQ2CL6K7A2IEZV5HCBNYDPXFCM2ZMCS474KZ44S5F; _vender_new_=GI63BGTJFDBQ46CD7JXUX3HEPM4P5LEA3TJTFGW4ZGGIVOLTPK5T25EXTBLCENPUTR7E2I23YDFQ4ARO6JW3NHSWBDE73RTUKJTADIPFPLYFE3ARGJUBPHWUIONS72KRQOZC5P7PB4VPPLRHGEP7L3Z5K62L2E2MGTWHFJRQ3CAVBDYVW2Z4J6U73HW4BKKOCDAH5T6OJJKWKLBZFOTI7342QSL7YQ2E3I4T777RNZF23XGOTCP3D4INHNO5MNKT3XJZQBVHWUVZYQUXCK5QQTKWADKQUCYV3JRY6YAYOD7Z5IIKGNLREQTCPO7SYGSIS655JUGOUILFLXVZE6KCFG7ZTPRUD6VPE4KCIE4OUZSED6FTSEZHTM363E7XXCHB4NA7VLZHCQSBHDVGMRA7RM4RGJC3MOI4TJNGCLW6QKUCCZAY7XTGOTMC53TFUYERGNIH2RBULZ7UTZH5GU3TC6RWFI2QL4QTAIARA6GNVXENEOYIPZEHN222YDAJX5OBBEECAMAPNKZ3XNF5CNGDJ3DSU2ZLOCAKLFPCYTIIWPPJMCQ636F5464HS4OVFPFNIDW4OCE23JRPYP5FAL6TKHPAC3H3ZRU7WA5GKJJKBZUGIX7NEO4LZB7FJ3RZZZH3UHPQMNILD5DT2V7HVCUOVNOFBEOW5ID2ZMQ3XV264IU4MYHN64RA; _BELONG_CLIENT_=WPSC4XJXWK5USS4JNZY2X7VRLR5MCBKRSVHEXABGTHDGISIQK5YOLZUXYE7IOIM7MOKO74H6CRN6WHAAR4TMDV3XZWMXZRCRT5XRNE3V356BTOB2Y7LPK66VWQK6HPTGWVXIDXDCPVE3W5WMHAIO6AT2LX2XXVNUCXR34ZWFK6HY45CORGIKOSYDYZBF27WOKTUX6BS4FZMIJWNUX6CB4JAA25ZLF7ZEKYOO4QV5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BMTUJZACIBHXQFAVLRF76VQY5PNJGGJNBEZHSFYYJA3YORRT7FB5AHCOIFQKF3W5RWNUX6CB4JAA26JNMO7AYWNUPZF5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BWZDKMOJ5BS6II53ERY6ALV3ZWPF42L4CPUHEGPYIII35KDC4FCNVCORCXFD6IVNLBEDPB2GGP4UHWNRUDOQBDIW7RZJXBA2WV5ANZOTEGUCDWYRVQS2YUTIZNZ276PRYG4N56V6YTII7MBKBC7LYHO7C555HTSBXGNRM3E466AYN67DHWVM5HQFJ4NFDO5BTOKMOS5L2CXFVYDR2FCOILVYPEI; _lvtc_=5ZH3OJ7CWYNVGEKDRC32XTFXGY"
|
||||
|
||||
elmIsProd = true
|
||||
elmToken = ""
|
||||
elmAppKey = "KLRDcOZGrk"
|
||||
@@ -221,6 +230,7 @@ enableEbaiStoreWrite = true
|
||||
enableMtwmStoreWrite = true
|
||||
enableWscStoreWrite = true
|
||||
enableYbStoreWrite = true
|
||||
enableJdShopWrite = true
|
||||
|
||||
disableWeimob = false
|
||||
weimobCallbackURL = "http://callback.jxc4.com/weimob"
|
||||
@@ -259,6 +269,7 @@ enableJdStoreWrite = true
|
||||
enableEbaiStoreWrite = true
|
||||
enableMtwmStoreWrite = true
|
||||
enableYbStoreWrite = true
|
||||
enableJdShopWrite = true
|
||||
|
||||
mtpsAppKey = "3c0a05d464c247c19d7ec13accc78605"
|
||||
mtpsSecret = "b1M}9?:sTbsB[OF2gNORnN(|(iy9rB8(`7]|[wGLnbmt`evfM>E:A90DjHAW:UPE"
|
||||
@@ -302,6 +313,10 @@ jdEclpAccessToken = "bcb6201b5b3c45a0976dcda5e2dea8aejiwm"
|
||||
jdEclpAppKey = "0D397F05CF11C51BCDCC81744680EBC3"
|
||||
jdEclpAppSecret = "f16a5e57ff4f4f428b702c40d2d4b933"
|
||||
|
||||
jdShopAccessToken = "de8157b447584885910f429011e49cb93yjq"
|
||||
jdShopAppKey = "E1D746D42474D5F1F1A10CECE75D99F6"
|
||||
jdShopAppSecret = "efa7e1d1a22640fa990e6cf164b28608"
|
||||
|
||||
storeName = "京西果园"
|
||||
|
||||
[test]
|
||||
@@ -397,9 +412,10 @@ jdEclpAccessToken = "bcb6201b5b3c45a0976dcda5e2dea8aejiwm"
|
||||
jdEclpAppKey = "0D397F05CF11C51BCDCC81744680EBC3"
|
||||
jdEclpAppSecret = "f16a5e57ff4f4f428b702c40d2d4b933"
|
||||
|
||||
jdShopAccessToken = "da8db492e20149e494afaf5607e1d6654zgi"
|
||||
jdShopAccessToken = "de8157b447584885910f429011e49cb93yjq"
|
||||
jdShopAppKey = "E1D746D42474D5F1F1A10CECE75D99F6"
|
||||
jdShopAppSecret = "efa7e1d1a22640fa990e6cf164b28608"
|
||||
jdsCookie = "shshshfpa=13b38d4a-8ba0-df12-0012-82d9a37fb835-1573795914; shshshfpb=abYp8Dq5JobRtp2pkZa7MbA%3D%3D; __jdu=1142616513; pinId=WMIzMhF5BfL6nJp9AcA2-A; pin=shop_jxcs; unick=shop_jxcs; _tp=7FBEvLyPe%2FKcgxsfY5lRgA%3D%3D; _pst=shop_jxcs; areaId=22; ipLoc-djd=22-1930-50948-57092; user-key=3ec204b4-f204-4320-98e3-b2569c757800; cn=0; shshshfp=5d23828ee6ea3a33e1a58588db1713f8; 3AB9D23F7A4B3C9B=AK36FFYF5J6WMPRH7YTXMEX4CATHR6NAA3IQEESU2I33FEJRQ3DRLU4SZJYD2XGFLCFW43DHYP5HQKOMR4EFQSLKLA; navigation=[%22shop_jxcs%22]; __jdv=122270672|baidu|-|organic|not set|1589514011252; language=zh_CN; ceshi3.com=000; csrf_token=b84d0a5c-6288-4db4-84e1-cadf66be3bf7; mba_muid=1142616513; TrackID=1qvZk-6QSAOp1NmaouJGEx58_cFglCFv57HEfoHOezMrOnV3_FSK-5ExeYhHx97IltBADG3dvJqLIt3P57wyUW4Z2Q3Y8ITo8Cfdmlz3kykM; RT="z=1&dm=jd.com&si=mcot45862q&ss=kaf1rcqz&sl=2&tt=38t&ld=22qx&nu=b99e5a7f32b36f184614d34a1d926a39&cl=3clu&ul=3crs&hd=3cz3"; b-sec=S2JWP6CAFP7K4I6PXVBUVCO6YVXUX2JAPDHLX5RZUDE4YKCGOEXJIINB3Q4THCFCMVWZPFAYGLWLG; thor=80FAF09E9A09B6E618A68057BDFCFCB8C86E8252DC9F7D3B34572625904FBA0AB6BF053A5325612EC0407791BB05F5301356E71E8B282C40C06D0B5DF3439DEECB102A78FAFF7AC0FC4E2D1FA8DD8BBAE1A011E50B5C74F1870AD982D7BF453F470F31F2241B73AC4C25485025C2ABEBC8A538AF7257824D2FAEE300A1435175B0B451FB5C19B78D729FC83152CA3BAF; _vender_=TNK3O6PALVQGGA33SGBIUTOKL4OOE6DP6OMNVIPMAMULGTRFWUMTVWGFRUTYP4L4EPN3KP73P33BOBN5SNJFBNQB5OMQYSJ5MORGQLJS7QAPOMIN7AZD6B3ZLP2DV4JCXDI5P3KOXJ3PHLIIRZ2YVS4JSSA3JRSBACNLJSC24ELO46GIMRW53XGW36EBPLZMZP2MQCAMJNO44FKT46B7VDVT7KQTELESOOF6E377AYC3NWKQF6ICIYBW4BA4JL5QG2NHGNOHOUJDNUW3N22UF32DLFLEIQGVO2W55J6AKPPBT227XA5NO4S3NFVIUUUADGOYH56T72MTNXCILWVMN4RMUNVFMGL4ISGXJS7YILE7A2ESPAU43MISAOZM2BR53MGRB5OZSQZPV5DBDCN2OVVT3XT5N2VMFELARQNTMAJCDBGXFURSN2Q7SYULLKZEZHTYWWOI65LS5OIHLUZQKWFGMNSQF2UBSYV7FG46CWJGMVHOGV3FY4RUEVJK6BQ223QK3H3VMTHXCZOZV4GKR5EWGIZZDVUAK4B36BPA5HPBO7PXKBOEXEBX77IYBNQLCGMK72J4VKNOUPYKNB5JE5D5UN3R2MMFGLJARTL2QTC5ZRZ4PJCJZWWOV37VWLWFVAN5IGHPAYME73KTNFABM5W73XLOXJFQWTFRZEK3FCL3BLRV4UOXLBQGA34R4WUBYSZURMKTXXB7U; __jda=65775340.1142616513.1573036516.1589946171.1589952725.54; __jdb=65775340.147.1142616513|54.1589952725; __jdc=65775340; _base_=YKH2KDFHMOZBLCUV7NSRBWQUJPBI7JIMU5R3EFJ5UDHJ5LCU7R2NILKK5UJ6GLA2RGYT464UKXAI4Z6HPCTN4UQM3WHVQ4ENFP57OC2DC7JQLRXRUO5PW6B77O6UXAZ4TCNE6YVKRXISVLBYGYO44RCDDPWDA4AEL7ZLXI2SG4SOQWCP5WPWO6EFS7HEHMRWVKBRVHB33TFD4SMNBHRJCTDFHU6SZXCZD6RFXX2OORYGL5H2GYF2IIH2KKD4T72IR4F577G2E5II2OMMXYF2GDYNTS7WGAUXFEWRJ3CTKDBDWMHUKJQF4ZFOTNBBYBIZRXZYERXXIG6ATJFKID7XOR3NQ2CL6K7A2IEZV5HCBNYDPXFCM2ZMCS474KZ44S5F; _vender_new_=GI63BGTJFDBQ46CD7JXUX3HEPM4P5LEA3TJTFGW4ZGGIVOLTPK5T25EXTBLCENPUTR7E2I23YDFQ4ARO6JW3NHSWBDE73RTUKJTADIPFPLYFE3ARGJUBPHWUIONS72KRQOZC5P7PB4VPPLRHGEP7L3Z5K62L2E2MGTWHFJRQ3CAVBDYVW2Z4J6U73HW4BKKOCDAH5T6OJJKWKLBZFOTI7342QSL7YQ2E3I4T777RNZF23XGOTCP3D4INHNO5MNKT3XJZQBVHWUVZYQUXCK5QQTKWADKQUCYV3JRY6YAYOD7Z5IIKGNLREQTCPO7SYGSIS655JUGOUILFLXVZE6KCFG7ZTPRUD6VPE4KCIE4OUZSED6FTSEZHTM363E7XXCHB4NA7VLZHCQSBHDVGMRA7RM4RGJC3MOI4TJNGCLW6QKUCCZAY7XTGOTMC53TFUYERGNIH2RBULZ7UTZH5GU3TC6RWFI2QL4QTAIARA6GNVXENEOYIPZEHN222YDAJX5OBBEECAMAPNKZ3XNF5CNGDJ3DSU2ZLOCAKLFPCYTIIWPPJMCQ636F5464HS4OVFPFNIDW4OCE23JRPYP5FAL6TKHPAC3H3ZRU7WA5GKJJKBZUGIX7NEO4LZB7FJ3RZZZH3UHPQMNILD5DT2V7HVCUOVNOFBEOW5ID2ZMQ3XV264IU4MYHN64RA; _BELONG_CLIENT_=WPSC4XJXWK5USS4JNZY2X7VRLR5MCBKRSVHEXABGTHDGISIQK5YOLZUXYE7IOIM7MOKO74H6CRN6WHAAR4TMDV3XZWMXZRCRT5XRNE3V356BTOB2Y7LPK66VWQK6HPTGWVXIDXDCPVE3W5WMHAIO6AT2LX2XXVNUCXR34ZWFK6HY45CORGIKOSYDYZBF27WOKTUX6BS4FZMIJWNUX6CB4JAA25ZLF7ZEKYOO4QV5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BMTUJZACIBHXQFAVLRF76VQY5PNJGGJNBEZHSFYYJA3YORRT7FB5AHCOIFQKF3W5RWNUX6CB4JAA26JNMO7AYWNUPZF5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BWZDKMOJ5BS6II53ERY6ALV3ZWPF42L4CPUHEGPYIII35KDC4FCNVCORCXFD6IVNLBEDPB2GGP4UHWNRUDOQBDIW7RZJXBA2WV5ANZOTEGUCDWYRVQS2YUTIZNZ276PRYG4N56V6YTII7MBKBC7LYHO7C555HTSBXGNRM3E466AYN67DHWVM5HQFJ4NFDO5BTOKMOS5L2CXFVYDR2FCOILVYPEI; _lvtc_=5ZH3OJ7CWYNVGEKDRC32XTFXGY"
|
||||
|
||||
elmIsProd = true
|
||||
elmToken = ""
|
||||
@@ -432,73 +448,3 @@ yinbaoAppKey = "682628966212343269"
|
||||
yinbaoAppID = "18C0E0867E467DBC26EFF5E957B02EC4"
|
||||
|
||||
aliUpcAppCode = "00a6eefba0204d3fa310ac0ee7a6fc54"
|
||||
|
||||
[prod3]
|
||||
EnableDocs = false
|
||||
|
||||
jdOrgCode = "320406"
|
||||
jdToken = "77e703b7-7997-441b-a12a-2e522efb117a"
|
||||
jdAppKey = "1dba76d40cac446ca500c0391a0b6c9d"
|
||||
jdSecret = "a88d031a1e7b462cb1579f12e97fe7f4"
|
||||
|
||||
jd2OrgCode = "349454"
|
||||
jd2Token = "29e0e567-c475-433a-aff0-37176ee8d8a7"
|
||||
jd2AppKey = "7fb947624ff847ae94ff2f068cc99652"
|
||||
jd2Secret = "1097abd7ef09427099b4922784af123a"
|
||||
|
||||
jdEclpAccessToken = "bcb6201b5b3c45a0976dcda5e2dea8aejiwm"
|
||||
jdEclpAppKey = "0D397F05CF11C51BCDCC81744680EBC3"
|
||||
jdEclpAppSecret = "f16a5e57ff4f4f428b702c40d2d4b933"
|
||||
|
||||
elmIsProd = true
|
||||
elmToken = ""
|
||||
elmAppKey = "KLRDcOZGrk"
|
||||
elmSecret = "1fc221f8265506531da36fb613d5f5ad673f2e9a"
|
||||
|
||||
ebaiSource = "34665"
|
||||
ebaiSecret = "c3db75b754ea2d89"
|
||||
|
||||
mtpsAppKey = "3c0a05d464c247c19d7ec13accc78605"
|
||||
mtpsSecret = "b1M}9?:sTbsB[OF2gNORnN(|(iy9rB8(`7]|[wGLnbmt`evfM>E:A90DjHAW:UPE"
|
||||
|
||||
dadaIsProd = true
|
||||
dadaCallbackURL = "http://callback.jxc4.com/dadadelivery/msg"
|
||||
dadaSourceID = "6660"
|
||||
|
||||
weixinAppID = "wx2bb99eb5d2c9b82c"
|
||||
weixinSecret = "6bbbed1443cc062c20a015a64c07a531"
|
||||
weixinMiniAppID2 = "wx4b5930c13f8b1170"
|
||||
weixinMiniSecret2 = "2a57228a716ce991a52739f0ff41111d"
|
||||
|
||||
yinbaoAppKey = "682628966212343269"
|
||||
yinbaoAppID = "18C0E0867E467DBC26EFF5E957B02EC4"
|
||||
|
||||
aliUpcAppCode = "00a6eefba0204d3fa310ac0ee7a6fc54"
|
||||
|
||||
wxpayNotifyURL = "http://callback.jxc4.com/wxpay/msg/"
|
||||
|
||||
tonglianPayAppID = "00183083"
|
||||
tonglianPayKey = "18048531223"
|
||||
tonglianPayCusID = "56065105499TVAH"
|
||||
tonglianPayNotifyURL = "http://callback.jxc4.com/tonglian/msg/"
|
||||
|
||||
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true"
|
||||
|
||||
enableStoreWrite = false
|
||||
enableJdStoreWrite = false
|
||||
enableEbaiStoreWrite = false
|
||||
enableMtwmStoreWrite = false
|
||||
enableWscStoreWrite = false
|
||||
enableYbStoreWrite = false
|
||||
|
||||
disableWeimob = false
|
||||
weimobCallbackURL = "http://callback.jxc4.com/weimob"
|
||||
|
||||
dingdingAgentID = 733555444
|
||||
dingdingAppKey = "dingrn2ujlpa4ler2x4d"
|
||||
dingdingSecret = "I4ZC1BH1_xwpE_NaXeYZkWgCIfbp39rne9JYObmdN3NINetA6ghf-a4jQ9YXa2n7"
|
||||
|
||||
dingdingQRCodeAppKey = "dingoacnwcbkbwhktccmmg"
|
||||
dingdingQRCodeSecret = "qizpI-k5a_5O9q7XVGRiqB4RDvbZ5qBTCzlxDVZwYxRQoyJoeg6LLrORDFLoLChc"
|
||||
|
||||
dingdingCallbackURL = "http://callback.jxc4.com/dingding/msg"
|
||||
@@ -246,7 +246,7 @@ func (c *StoreSkuController) UpdateStoresSkusByBind() {
|
||||
if err = jxutils.Strings2Objs(params.Payload, &skuBindInfos); err != nil {
|
||||
return retVal, "", err
|
||||
}
|
||||
retVal, err = cms.UpdateStoresSkusByBind(params.Ctx, nil, skuBindInfos, params.IsAsync, params.IsContinueWhenError)
|
||||
retVal, err = cms.UpdateStoresSkusByBind(params.Ctx, nil, skuBindInfos, params.IsAsync, params.IsContinueWhenError, false)
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
@@ -366,3 +366,22 @@ func (c *SyncController) SyncStoreSkusFromYb() {
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 同步京东商城门店商品和库存
|
||||
// @Description 同步京东商城门店商品和库存
|
||||
// @Param token header string true "认证token"
|
||||
// @Param storeIDs formData string false "门店ID列表"
|
||||
// @Param isAsync formData bool false "是否异步操作"
|
||||
// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /SyncJdsStoresSkus [put]
|
||||
func (c *SyncController) SyncJdsStoresSkus() {
|
||||
c.callSyncJdsStoresSkus(func(params *tSyncSyncJdsStoresSkusParams) (retVal interface{}, errCode string, err error) {
|
||||
var storeIDs []int
|
||||
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs); err == nil {
|
||||
retVal, err = cms.CurVendorSync.SyncJdsStoresSkus(params.Ctx, storeIDs, params.IsAsync, params.IsContinueWhenError)
|
||||
}
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
36
controllers/jds_callback.go
Normal file
36
controllers/jds_callback.go
Normal file
@@ -0,0 +1,36 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/partner/purchase/jdshop"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
"github.com/astaxie/beego"
|
||||
)
|
||||
|
||||
type JdsController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
func (c *JdsController) Msg() {
|
||||
fmt.Println("testjdscll")
|
||||
if c.Ctx.Input.Method() == http.MethodPost {
|
||||
ctx := c.Ctx
|
||||
ctx.Request.Body = ioutil.NopCloser(bytes.NewReader(ctx.Input.RequestBody))
|
||||
call, err := api.JdShopAPI.GetCallbackMsg(ctx.Request)
|
||||
if err == nil {
|
||||
jdshop.OnCallbackMsg(call)
|
||||
}
|
||||
globals.SugarLogger.Debugf("jds callback callbackResponse:%s", utils.Format4Output(call, true))
|
||||
c.Data["json"] = call
|
||||
c.ServeJSON()
|
||||
} else {
|
||||
c.Abort("404")
|
||||
}
|
||||
}
|
||||
@@ -1031,3 +1031,31 @@ func (c *OrderController) RefreshJdShopOrdersEarningPrice() {
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 根据订单号查询一些信息
|
||||
// @Description 根据订单号查询一些信息
|
||||
// @Param token header string false "认证token"
|
||||
// @Param vendorOrderID query string true "订单号"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /GetOrderSimpleInfo [get]
|
||||
func (c *OrderController) GetOrderSimpleInfo() {
|
||||
c.callGetOrderSimpleInfo(func(params *tOrderGetOrderSimpleInfoParams) (retVal interface{}, errCode string, err error) {
|
||||
retVal, err = orderman.GetOrderSimpleInfo(params.Ctx, params.VendorOrderID)
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 根据订单号查询用户是否是第一次购买
|
||||
// @Description 根据订单号查询用户是否是第一次购买
|
||||
// @Param token header string true "认证token"
|
||||
// @Param vendorOrderID query string true "订单号"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /GetOrderUserBuyFirst [get]
|
||||
func (c *OrderController) GetOrderUserBuyFirst() {
|
||||
c.callGetOrderUserBuyFirst(func(params *tOrderGetOrderUserBuyFirstParams) (retVal interface{}, errCode string, err error) {
|
||||
retVal, err = orderman.GetOrderUserBuyFirst(params.Ctx, params.VendorOrderID)
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
@@ -368,3 +368,16 @@ func (c *TempOpController) BuildSkuFromEbaiStore() {
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 上传京东商城图片
|
||||
// @Description 上传京东商城图片
|
||||
// @Param token header string true "认证token"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /UploadJdsImage [post]
|
||||
func (c *TempOpController) UploadJdsImage() {
|
||||
c.callUploadJdsImage(func(params *tTempopUploadJdsImageParams) (retVal interface{}, errCode string, err error) {
|
||||
err = tempop.UploadJdsImage(params.Ctx)
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
@@ -123,6 +123,9 @@ func Init() {
|
||||
}
|
||||
if !beego.AppConfig.DefaultBool("disableJdShop", false) {
|
||||
JdShopAPI = jdshopapi.New(beego.AppConfig.String("jdShopAccessToken"), beego.AppConfig.String("jdShopAppKey"), beego.AppConfig.String("jdShopAppSecret"))
|
||||
// if jdsCookie := beego.AppConfig.DefaultString("jdsCookie", ""); jdsCookie != "" {
|
||||
// JdShopAPI.SetCookieWithStr(jdsCookie)
|
||||
// }
|
||||
} else {
|
||||
JdShopAPI = nil
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ func Init() {
|
||||
orm.RegisterModel(&model.UserCartItem{})
|
||||
orm.RegisterModel(&model.UserAgreement{})
|
||||
orm.RegisterModel(&model.OrderPay{}, &model.OrderPayRefund{})
|
||||
orm.RegisterModel(&model.UserOrderSms{})
|
||||
|
||||
orm.RegisterModel(&model.FakeJdThingMap{})
|
||||
|
||||
|
||||
@@ -48,6 +48,7 @@ var (
|
||||
SMSMobileVerifyTemplate string
|
||||
SMSNewOrderTemplate string
|
||||
SMSOrderCanceledTemplate string
|
||||
SMSNewUserOrderTemplate string
|
||||
|
||||
EnableWXAuth2 bool
|
||||
DisableWXAuth1 bool
|
||||
@@ -119,6 +120,7 @@ func Init() {
|
||||
SMSMobileVerifyTemplate = beego.AppConfig.String("smsMobileVerifyTemplate")
|
||||
SMSNewOrderTemplate = beego.AppConfig.String("smsNewOrderTemplate")
|
||||
SMSOrderCanceledTemplate = beego.AppConfig.String("smsOrderCanceledTemplate")
|
||||
SMSNewUserOrderTemplate = beego.AppConfig.String("smsNewUserOrderTemplate")
|
||||
|
||||
EnableWXAuth2 = true // beego.BConfig.RunMode == "beta"
|
||||
DisableWXAuth1 = true
|
||||
|
||||
3
main.go
3
main.go
@@ -8,6 +8,8 @@ import (
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/partner/purchase/jdshop"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/partner/purchase/yb"
|
||||
|
||||
"github.com/astaxie/beego"
|
||||
@@ -77,6 +79,7 @@ func Init() {
|
||||
ebai.CurPurchaseHandler.StartRefreshComment()
|
||||
mtwm.CurPurchaseHandler.StartRefreshComment()
|
||||
yb.CurPurchaseHandler.StartRefreshComment()
|
||||
jdshop.CurPurchaseHandler.StartRefreshComment()
|
||||
}
|
||||
misc.Init()
|
||||
}
|
||||
|
||||
@@ -1017,6 +1017,15 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||
beego.ControllerComments{
|
||||
Method: "GetOrderSimpleInfo",
|
||||
Router: `/GetOrderSimpleInfo`,
|
||||
AllowHTTPMethods: []string{"get"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||
beego.ControllerComments{
|
||||
Method: "GetOrderSkuInfo",
|
||||
@@ -1035,6 +1044,15 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||
beego.ControllerComments{
|
||||
Method: "GetOrderUserBuyFirst",
|
||||
Router: `/GetOrderUserBuyFirst`,
|
||||
AllowHTTPMethods: []string{"get"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||
beego.ControllerComments{
|
||||
Method: "GetOrderWaybillInfo",
|
||||
@@ -2223,6 +2241,15 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"],
|
||||
beego.ControllerComments{
|
||||
Method: "SyncJdsStoresSkus",
|
||||
Router: `/SyncJdsStoresSkus`,
|
||||
AllowHTTPMethods: []string{"put"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"],
|
||||
beego.ControllerComments{
|
||||
Method: "SyncSkuNames",
|
||||
@@ -2448,6 +2475,15 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TempOpController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TempOpController"],
|
||||
beego.ControllerComments{
|
||||
Method: "UploadJdsImage",
|
||||
Router: `/UploadJdsImage`,
|
||||
AllowHTTPMethods: []string{"post"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"],
|
||||
beego.ControllerComments{
|
||||
Method: "AddMyDeliveryAddress",
|
||||
|
||||
@@ -157,6 +157,7 @@ func init() {
|
||||
beego.AutoRouter(&controllers.Djsw2Controller{})
|
||||
beego.AutoRouter(&controllers.TongLianController{})
|
||||
beego.AutoRouter(&controllers.EclpController{})
|
||||
beego.AutoRouter(&controllers.JdsController{})
|
||||
|
||||
// 如下都是用于检测存活的空接口
|
||||
beego.Any("/", func(ctx *beecontext.Context) {
|
||||
|
||||
Reference in New Issue
Block a user