Merge remote-tracking branch 'origin/mark' into jdshop
This commit is contained in:
@@ -243,6 +243,7 @@ func LoginInternal(ctx *Context, authType, authID, authIDType, authSecret string
|
|||||||
realAuthID = user.GetID()
|
realAuthID = user.GetID()
|
||||||
}
|
}
|
||||||
if authBindEx, err = handler.VerifySecret(realAuthID, authSecret); err == nil {
|
if authBindEx, err = handler.VerifySecret(realAuthID, authSecret); err == nil {
|
||||||
|
globals.SugarLogger.Debugf("Login authBindEx", utils.Format4Output(authBindEx, false))
|
||||||
if authBindEx == nil { // mobile, email会返回nil(表示不会新建AuthBind实体)
|
if authBindEx == nil { // mobile, email会返回nil(表示不会新建AuthBind实体)
|
||||||
user = userProvider.GetUser(authID, authIDType)
|
user = userProvider.GetUser(authID, authIDType)
|
||||||
authBindEx = &AuthBindEx{
|
authBindEx = &AuthBindEx{
|
||||||
@@ -265,6 +266,10 @@ func LoginInternal(ctx *Context, authType, authID, authIDType, authSecret string
|
|||||||
// if user != nil {
|
// if user != nil {
|
||||||
// authBindEx.UserID = user.GetID()
|
// authBindEx.UserID = user.GetID()
|
||||||
// }
|
// }
|
||||||
|
if user2 := userProvider.GetUser(authBindEx.UserHint.Email, UserIDMobile); user2 != nil {
|
||||||
|
user = user2
|
||||||
|
}
|
||||||
|
|
||||||
} else if authBindEx.UserID != "" {
|
} else if authBindEx.UserID != "" {
|
||||||
user = userProvider.GetUser(authBindEx.UserID, UserIDID)
|
user = userProvider.GetUser(authBindEx.UserID, UserIDID)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ func (c *OrderManager) OnOrderAdjust(order *model.GoodsOrder, orderStatus *model
|
|||||||
// }, "OnAdjustOrder delete order_sku, orderID:%s", order.VendorOrderID)
|
// }, "OnAdjustOrder delete order_sku, orderID:%s", order.VendorOrderID)
|
||||||
order.AdjustCount = adjustCount + 1
|
order.AdjustCount = adjustCount + 1
|
||||||
//扣点的订单需要修改订单的totalshopmoney
|
//扣点的订单需要修改订单的totalshopmoney
|
||||||
if err == nil && order.OrderPayPercentage < 100 {
|
if err == nil && order.OrderPayPercentage < 50 && order.OrderPayPercentage > 0 {
|
||||||
order2, _ := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID).GetOrder(order.VendorOrgCode, order.VendorOrderID, order.VendorStoreID)
|
order2, _ := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID).GetOrder(order.VendorOrgCode, order.VendorOrderID, order.VendorStoreID)
|
||||||
order.TotalShopMoney = order2.TotalShopMoney
|
order.TotalShopMoney = order2.TotalShopMoney
|
||||||
}
|
}
|
||||||
@@ -345,14 +345,12 @@ func (c *OrderManager) SaveOrder(order *model.GoodsOrder, isAdjust bool, db *dao
|
|||||||
} else {
|
} else {
|
||||||
globals.SugarLogger.Warnf("saveOrder create order:%v, error:%v", order, err)
|
globals.SugarLogger.Warnf("saveOrder create order:%v, error:%v", order, err)
|
||||||
}
|
}
|
||||||
if err == nil {
|
|
||||||
dao.Commit(db)
|
|
||||||
}
|
|
||||||
//修改商品库存
|
//修改商品库存
|
||||||
if err == nil {
|
if err == nil {
|
||||||
utils.CallFuncAsync(func() {
|
|
||||||
err = ModifyOrderSkusStock(db, order, false)
|
err = ModifyOrderSkusStock(db, order, false)
|
||||||
})
|
}
|
||||||
|
if err == nil {
|
||||||
|
dao.Commit(db)
|
||||||
}
|
}
|
||||||
return isDuplicated, err
|
return isDuplicated, err
|
||||||
}
|
}
|
||||||
@@ -384,7 +382,7 @@ func ModifyOrderSkusStock(db *dao.DaoDB, order *model.GoodsOrder, isAdd bool) (e
|
|||||||
if len(storeSkus2) > 0 {
|
if len(storeSkus2) > 0 {
|
||||||
storeSku3 := storeSkus2[0]
|
storeSku3 := storeSkus2[0]
|
||||||
storeSku3.Stock = storeSku3.Stock + sku.Count
|
storeSku3.Stock = storeSku3.Stock + sku.Count
|
||||||
dao.UpdateEntity(db, storeSku3, "Stock")
|
db.Db.Update(storeSku3, "Stock")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
realStock := checkPriceDefendOrderByStock(db, jxutils.GetSaleStoreIDFromOrder(order), sku.SkuID, stock, storeSku.JxPrice)
|
realStock := checkPriceDefendOrderByStock(db, jxutils.GetSaleStoreIDFromOrder(order), sku.SkuID, stock, storeSku.JxPrice)
|
||||||
@@ -393,9 +391,9 @@ func ModifyOrderSkusStock(db *dao.DaoDB, order *model.GoodsOrder, isAdd bool) (e
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
storeSku.Stock = stock
|
storeSku.Stock = stock
|
||||||
dao.UpdateEntity(db, storeSku, "Stock")
|
db.Db.Update(storeSku, "Stock")
|
||||||
if order.VendorID != model.VendorIDJX {
|
if order.VendorID != model.VendorIDJX {
|
||||||
dao.SetStoreSkuSyncStatus(db, order.VendorID, []int{jxutils.GetSaleStoreIDFromOrder(order)}, []int{sku.SkuID}, model.SyncFlagStockMask)
|
// dao.SetStoreSkuSyncStatus(db, order.VendorID, []int{jxutils.GetSaleStoreIDFromOrder(order)}, []int{sku.SkuID}, model.SyncFlagStockMask)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
@@ -545,35 +543,25 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao.
|
|||||||
//TODO 京东美团的订单,做活动的商品之前就会拆分出来,所以只做更新,饿百暂时不管, 2020-05-07
|
//TODO 京东美团的订单,做活动的商品之前就会拆分出来,所以只做更新,饿百暂时不管, 2020-05-07
|
||||||
//TODO 不根据商品是否拆分,直接根据该商品做了活动,并且他的vendorPrice 和 salePrice 相等,就按新规则结算, 2020-05-11
|
//TODO 不根据商品是否拆分,直接根据该商品做了活动,并且他的vendorPrice 和 salePrice 相等,就按新规则结算, 2020-05-11
|
||||||
//TODO 现在不判断商品做没做活动,只要vendorPrice和salePrice不等,就默认为做了活动,不做活动的商品就按新规则结算,2020-05-18
|
//TODO 现在不判断商品做没做活动,只要vendorPrice和salePrice不等,就默认为做了活动,不做活动的商品就按新规则结算,2020-05-18
|
||||||
if order.VendorID == model.VendorIDJD || order.VendorID == model.VendorIDMTWM {
|
// if order.VendorID == model.VendorIDJD || order.VendorID == model.VendorIDMTWM {
|
||||||
for _, v := range orderSkus {
|
// for _, v := range orderSkus {
|
||||||
if v.EarningPrice > 0 {
|
// if v.EarningPrice > 0 {
|
||||||
// var storeID int
|
// if v.VendorPrice == v.SalePrice {
|
||||||
// if order.StoreID == 0 {
|
// var earningPrice = 0
|
||||||
// storeID = order.JxStoreID
|
// 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 {
|
// } else {
|
||||||
// storeID = order.StoreID
|
// earningPrice = int(utils.Float64TwoInt64(math.Round(utils.Int2Float64(int(v.ShopPrice)) * utils.Int2Float64(storePayPercentage) / 100)))
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// earningPrice = int(utils.Float64TwoInt64(math.Round(utils.Int2Float64(int(v.SalePrice)) * utils.Int2Float64(storePayPercentage) / 100)))
|
||||||
|
// }
|
||||||
|
// v.EarningPrice = int64(earningPrice)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
// 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)))
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
earningPrice = int(utils.Float64TwoInt64(math.Round(utils.Int2Float64(int(v.SalePrice)) * utils.Int2Float64(storePayPercentage) / 100)))
|
|
||||||
}
|
|
||||||
v.EarningPrice = int64(earningPrice)
|
|
||||||
// v.StoreSubID = 0
|
|
||||||
}
|
|
||||||
// }
|
// }
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -1942,7 +1930,7 @@ func UpdateOrderInfo(ctx *jxcontext.Context, vendorOrderID string, vendorID int,
|
|||||||
func RefreshOrderSkuInfo(ctx *jxcontext.Context, vendorOrderID string, vendorID, skuID int) (num int64, err error) {
|
func RefreshOrderSkuInfo(ctx *jxcontext.Context, vendorOrderID string, vendorID, skuID int) (num int64, err error) {
|
||||||
var (
|
var (
|
||||||
db = dao.GetDB()
|
db = dao.GetDB()
|
||||||
shopPrice int64
|
shopPrice, earningPrice int64
|
||||||
)
|
)
|
||||||
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
|
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
|
||||||
if order.EarningType != model.EarningTypeQuote {
|
if order.EarningType != model.EarningTypeQuote {
|
||||||
@@ -1954,8 +1942,11 @@ func RefreshOrderSkuInfo(ctx *jxcontext.Context, vendorOrderID string, vendorID,
|
|||||||
return fmt.Errorf("未找到此门店商品!")
|
return fmt.Errorf("未找到此门店商品!")
|
||||||
}
|
}
|
||||||
storeSku := storeSkus[0]
|
storeSku := storeSkus[0]
|
||||||
|
if v.ShopPrice == v.EarningPrice {
|
||||||
|
v.EarningPrice = int64(math.Round(float64(storeSku.Price) * float64(order.OrderPayPercentage) / 100))
|
||||||
|
}
|
||||||
v.ShopPrice = int64(storeSku.Price)
|
v.ShopPrice = int64(storeSku.Price)
|
||||||
dao.UpdateEntity(db, v, "ShopPrice")
|
dao.UpdateEntity(db, v, "ShopPrice", "EarningPrice")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
dao.Begin(db)
|
dao.Begin(db)
|
||||||
@@ -1981,9 +1972,11 @@ func RefreshOrderSkuInfo(ctx *jxcontext.Context, vendorOrderID string, vendorID,
|
|||||||
}
|
}
|
||||||
for _, v := range order.Skus {
|
for _, v := range order.Skus {
|
||||||
shopPrice += v.ShopPrice * int64(v.Count)
|
shopPrice += v.ShopPrice * int64(v.Count)
|
||||||
|
earningPrice += v.EarningPrice * int64(v.Count)
|
||||||
}
|
}
|
||||||
order.ShopPrice = shopPrice
|
order.ShopPrice = shopPrice
|
||||||
num, err = dao.UpdateEntity(db, order, "ShopPrice")
|
order.EarningPrice = earningPrice
|
||||||
|
num, err = dao.UpdateEntity(db, order, "ShopPrice", "EarningPrice")
|
||||||
dao.Commit(db)
|
dao.Commit(db)
|
||||||
return num, err
|
return num, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,10 +12,9 @@ import (
|
|||||||
|
|
||||||
"github.com/astaxie/beego"
|
"github.com/astaxie/beego"
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/globals/api"
|
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/excel"
|
"git.rosy.net.cn/jx-callback/business/jxutils/excel"
|
||||||
@@ -74,7 +73,14 @@ func (c *OrderManager) GetStoreOrderCountInfo(ctx *jxcontext.Context, storeID, l
|
|||||||
} else if lastHours == 0 && lastMinutes == 0 {
|
} else if lastHours == 0 && lastMinutes == 0 {
|
||||||
lastHours = defLastHours
|
lastHours = defLastHours
|
||||||
}
|
}
|
||||||
|
//权限
|
||||||
|
if permission.IsRoled(ctx) {
|
||||||
|
if storeIDsMap, err := permission.GetUserStoresResultMap(ctx.GetUserID()); err == nil {
|
||||||
|
if storeIDsMap[storeID] == 0 {
|
||||||
|
storeID = -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
sql := `
|
sql := `
|
||||||
SELECT t1.lock_status, t1.status, COUNT(*) count
|
SELECT t1.lock_status, t1.status, COUNT(*) count
|
||||||
@@ -301,6 +307,9 @@ func (c *OrderManager) GetOrders(ctx *jxcontext.Context, isIncludeFake bool, fro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(storeIDs2) == 0 {
|
||||||
|
storeIDs2 = append(storeIDs2, -1)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
for k, _ := range storeIDsMap {
|
for k, _ := range storeIDsMap {
|
||||||
storeIDs2 = append(storeIDs2, k)
|
storeIDs2 = append(storeIDs2, k)
|
||||||
@@ -345,6 +354,9 @@ func (c *OrderManager) ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(storeIDs2) == 0 {
|
||||||
|
storeIDs2 = append(storeIDs2, -1)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
for k, _ := range storeIDsMap {
|
for k, _ := range storeIDsMap {
|
||||||
storeIDs2 = append(storeIDs2, k)
|
storeIDs2 = append(storeIDs2, k)
|
||||||
@@ -385,12 +397,18 @@ func (c *OrderManager) ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateS
|
|||||||
}, ",")
|
}, ",")
|
||||||
} else {
|
} else {
|
||||||
if v.EarningType == model.EarningTypeQuote {
|
if v.EarningType == model.EarningTypeQuote {
|
||||||
|
earningPrice := 0
|
||||||
|
if v.SkuEarningPrice != 0 {
|
||||||
|
earningPrice = v.SkuEarningPrice
|
||||||
|
} else {
|
||||||
|
earningPrice = v.SkuShopPrice
|
||||||
|
}
|
||||||
skuStr = strings.Join([]string{
|
skuStr = strings.Join([]string{
|
||||||
utils.Int2Str(v.SkuID),
|
utils.Int2Str(v.SkuID),
|
||||||
utils.Int2Str(v.SkuCount2),
|
utils.Int2Str(v.SkuCount2),
|
||||||
utils.Int2Str(v.SkuEarningPrice),
|
|
||||||
utils.Int2Str(v.SkuSalePrice),
|
|
||||||
utils.Int2Str(v.SkuShopPrice),
|
utils.Int2Str(v.SkuShopPrice),
|
||||||
|
utils.Int2Str(v.SkuSalePrice),
|
||||||
|
utils.Int2Str(earningPrice),
|
||||||
}, ",")
|
}, ",")
|
||||||
} else {
|
} else {
|
||||||
skuStr = strings.Join([]string{
|
skuStr = strings.Join([]string{
|
||||||
@@ -759,7 +777,7 @@ func (c *OrderManager) GetStoresOrderSaleInfoNew(ctx *jxcontext.Context, storeID
|
|||||||
//成都菜市
|
//成都菜市
|
||||||
if beego.BConfig.RunMode == "prod" || beego.BConfig.RunMode == "beta" {
|
if beego.BConfig.RunMode == "prod" || beego.BConfig.RunMode == "beta" {
|
||||||
if v.EarningType == model.EarningTypeQuote {
|
if v.EarningType == model.EarningTypeQuote {
|
||||||
saleInfo.RealEarningPrice += v.ShopPrice * int64(v.Count)
|
saleInfo.RealEarningPrice += v.EarningPrice * int64(v.Count)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if v.OrderPayPercentage == 100 {
|
if v.OrderPayPercentage == 100 {
|
||||||
@@ -900,6 +918,9 @@ func (c *OrderManager) GetAfsOrders(ctx *jxcontext.Context, keyword, afsOrderID,
|
|||||||
storeIDs2 = append(storeIDs2, v)
|
storeIDs2 = append(storeIDs2, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(storeIDs2) == 0 {
|
||||||
|
storeIDs2 = append(storeIDs2, -1)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
for k, _ := range storeIDsMap {
|
for k, _ := range storeIDsMap {
|
||||||
storeIDs2 = append(storeIDs2, k)
|
storeIDs2 = append(storeIDs2, k)
|
||||||
@@ -1400,8 +1421,15 @@ func GetMatterStoreOrderCount(ctx *jxcontext.Context, storeID int) (result *Orde
|
|||||||
func RefreshJdShopOrdersEarningPrice(ctx *jxcontext.Context, orderStartTime, orderEndTime string) (err error) {
|
func RefreshJdShopOrdersEarningPrice(ctx *jxcontext.Context, orderStartTime, orderEndTime string) (err error) {
|
||||||
var (
|
var (
|
||||||
db = dao.GetDB()
|
db = dao.GetDB()
|
||||||
|
appOrgCode string
|
||||||
)
|
)
|
||||||
results, err := api.JdAPI.GetJdShopOrders(utils.Str2Time(orderStartTime).Format("20060102"), utils.Str2Time(orderEndTime).Format("20060102"), globals.JdOrgCode, globals.JdLoginName)
|
if beego.BConfig.RunMode == "jxgy" {
|
||||||
|
appOrgCode = "339032"
|
||||||
|
} else {
|
||||||
|
appOrgCode = "320406"
|
||||||
|
}
|
||||||
|
jdapi := partner.CurAPIManager.GetAPI(model.VendorIDJD, appOrgCode).(*jdapi.API)
|
||||||
|
results, err := jdapi.GetJdShopOrders(utils.Str2Time(orderStartTime).Format("20060102"), utils.Str2Time(orderEndTime).Format("20060102"), globals.JdOrgCode, globals.JdLoginName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1414,12 +1442,12 @@ func RefreshJdShopOrdersEarningPrice(ctx *jxcontext.Context, orderStartTime, ord
|
|||||||
stores, _ := dao.GetStoreList(db, []int{jxutils.GetSaleStoreIDFromOrder(order)}, nil, nil, nil, nil, "")
|
stores, _ := dao.GetStoreList(db, []int{jxutils.GetSaleStoreIDFromOrder(order)}, nil, nil, nil, nil, "")
|
||||||
if len(stores) > 0 {
|
if len(stores) > 0 {
|
||||||
store := stores[0]
|
store := stores[0]
|
||||||
if order.NewEarningPrice == 0 {
|
|
||||||
jxutils.RefreshOrderEarningPrice2(order, store.PayPercentage)
|
|
||||||
}
|
|
||||||
if order.TotalShopMoney == 0 {
|
if order.TotalShopMoney == 0 {
|
||||||
order.TotalShopMoney = utils.Float64TwoInt64(v.DueAmount * 100)
|
order.TotalShopMoney = utils.Float64TwoInt64(v.DueAmount * 100)
|
||||||
}
|
}
|
||||||
|
if order.NewEarningPrice == 0 {
|
||||||
|
jxutils.RefreshOrderEarningPrice2(order, store.PayPercentage)
|
||||||
|
}
|
||||||
dao.UpdateEntity(db, order, "TotalShopMoney", "NewEarningPrice")
|
dao.UpdateEntity(db, order, "TotalShopMoney", "NewEarningPrice")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -484,16 +484,6 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku, isQueryMidPric
|
|||||||
sqlParams = append(sqlParams, nameIDs)
|
sqlParams = append(sqlParams, nameIDs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if params["isExd"] != nil {
|
|
||||||
var idExd = params["isExd"].(bool)
|
|
||||||
if idExd {
|
|
||||||
sql += " AND t2.exd_sku_id <> ''"
|
|
||||||
} else {
|
|
||||||
sql += " AND t2.exd_sku_id = ''"
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
sql += " AND t2.exd_sku_id = ''"
|
|
||||||
}
|
|
||||||
if params["categoryID"] != nil {
|
if params["categoryID"] != nil {
|
||||||
cat := &model.SkuCategory{}
|
cat := &model.SkuCategory{}
|
||||||
cat.ID = params["categoryID"].(int)
|
cat.ID = params["categoryID"].(int)
|
||||||
@@ -508,6 +498,16 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku, isQueryMidPric
|
|||||||
}
|
}
|
||||||
sql += ")"
|
sql += ")"
|
||||||
}
|
}
|
||||||
|
if params["isExd"] != nil {
|
||||||
|
var idExd = params["isExd"].(bool)
|
||||||
|
if idExd {
|
||||||
|
sql += " AND t2.exd_sku_id <> ''"
|
||||||
|
} else {
|
||||||
|
sql += " AND t2.exd_sku_id = ''"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sql += " AND t2.exd_sku_id = ''"
|
||||||
|
}
|
||||||
if params["skuCategoryID"] != nil {
|
if params["skuCategoryID"] != nil {
|
||||||
cat := &model.SkuCategory{}
|
cat := &model.SkuCategory{}
|
||||||
cat.ID = params["skuCategoryID"].(int)
|
cat.ID = params["skuCategoryID"].(int)
|
||||||
@@ -589,8 +589,10 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku, isQueryMidPric
|
|||||||
sql += " AND t2.status >= ? AND t2.status <= ?"
|
sql += " AND t2.status >= ? AND t2.status <= ?"
|
||||||
sqlParams = append(sqlParams, fromStatus, toStatus)
|
sqlParams = append(sqlParams, fromStatus, toStatus)
|
||||||
}
|
}
|
||||||
sql += `
|
sqlData := `
|
||||||
GROUP BY
|
SELECT
|
||||||
|
SQL_CALC_FOUND_ROWS
|
||||||
|
DISTINCT
|
||||||
t1.id,
|
t1.id,
|
||||||
t1.created_at,
|
t1.created_at,
|
||||||
t1.updated_at,
|
t1.updated_at,
|
||||||
@@ -622,73 +624,13 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku, isQueryMidPric
|
|||||||
t1.best_seller
|
t1.best_seller
|
||||||
`
|
`
|
||||||
if isQueryMidPrice {
|
if isQueryMidPrice {
|
||||||
sql += `,
|
sqlData += ",t4.mid_unit_price"
|
||||||
t4.mid_unit_price`
|
|
||||||
}
|
}
|
||||||
if isBySku {
|
sqlData += sql + `
|
||||||
sql += `,
|
ORDER BY t1.id DESC
|
||||||
t2.id`
|
|
||||||
}
|
|
||||||
sqlData := `
|
|
||||||
SELECT
|
|
||||||
SQL_CALC_FOUND_ROWS
|
|
||||||
t1.id,
|
|
||||||
t1.created_at,
|
|
||||||
t1.updated_at,
|
|
||||||
t1.last_operator,
|
|
||||||
t1.deleted_at,
|
|
||||||
t1.prefix,
|
|
||||||
t1.name,
|
|
||||||
t1.brand_id,
|
|
||||||
t1.category_id,
|
|
||||||
t1.jd_category_id,
|
|
||||||
t1.is_global,
|
|
||||||
t1.unit,
|
|
||||||
t1.price,
|
|
||||||
t1.img,
|
|
||||||
t1.img2,
|
|
||||||
t1.img3,
|
|
||||||
t1.img_watermark,
|
|
||||||
t1.img_mix,
|
|
||||||
t1.status,
|
|
||||||
t1.is_spu,
|
|
||||||
t1.desc_img,
|
|
||||||
t1.upc,
|
|
||||||
/*
|
|
||||||
t1.jd_id,
|
|
||||||
t1.jd_sync_status,
|
|
||||||
*/
|
|
||||||
t1.ex_prefix,
|
|
||||||
t1.ex_prefix_begin,
|
|
||||||
t1.ex_prefix_end,
|
|
||||||
t1.yb_name_suffix,
|
|
||||||
t1.jds_stock_switch,
|
|
||||||
t1.preparation_time,
|
|
||||||
t1.best_seller,
|
|
||||||
`
|
|
||||||
if isQueryMidPrice {
|
|
||||||
sqlData += " t4.mid_unit_price,"
|
|
||||||
}
|
|
||||||
sqlData +=
|
|
||||||
`
|
|
||||||
CONCAT("[", GROUP_CONCAT(DISTINCT CONCAT('{"id":', t2.id, ',"comment":"', t2.comment, '","status":', t2.status,
|
|
||||||
',"createdAt":"', CONCAT(REPLACE(t2.created_at," ","T"),"+08:00"), '","updatedAt":"', CONCAT(REPLACE(t2.updated_at," ","T"),"+08:00"),
|
|
||||||
'","lastOperator":"', t2.last_operator, '","specQuality":', t2.spec_quality, ',"specUnit":"', t2.spec_unit,
|
|
||||||
'","exdSkuID":"', t2.exd_sku_id,
|
|
||||||
'","eclpID":"', t2.eclp_id,
|
|
||||||
'","weight":', t2.weight, ',"categoryID":', t2.category_id, ',"nameID":', t2.name_id,
|
|
||||||
', "seq":', t2.seq,
|
|
||||||
', "minOrderCount":', t2.min_order_count,
|
|
||||||
', "ladderBoxNum":', t2.ladder_box_num,
|
|
||||||
', "ladderBoxPrice":', t2.ladder_box_price,
|
|
||||||
"}")), "]") skus_str,
|
|
||||||
CONCAT("[", GROUP_CONCAT(DISTINCT t3.place_code), "]") places_str
|
|
||||||
` + sql + `
|
|
||||||
ORDER BY MIN(t2.seq), t1.id DESC
|
|
||||||
LIMIT ? OFFSET ?`
|
LIMIT ? OFFSET ?`
|
||||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||||
offset = jxutils.FormalizePageOffset(offset)
|
offset = jxutils.FormalizePageOffset(offset)
|
||||||
|
|
||||||
sqlParams = append(sqlParams, pageSize, offset)
|
sqlParams = append(sqlParams, pageSize, offset)
|
||||||
skuNamesInfo = &SkuNamesInfo{}
|
skuNamesInfo = &SkuNamesInfo{}
|
||||||
dao.Begin(db) // todo 这里用事务的原因是,SQL_CALC_FOUND_ROWS会出错
|
dao.Begin(db) // todo 这里用事务的原因是,SQL_CALC_FOUND_ROWS会出错
|
||||||
@@ -698,30 +640,28 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku, isQueryMidPric
|
|||||||
panic(r)
|
panic(r)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
// globals.SugarLogger.Debug(sqlData)
|
|
||||||
// globals.SugarLogger.Debug(utils.Format4Output(sqlParams, false))
|
|
||||||
if err = dao.GetRows(db, &skuNamesInfo.SkuNames, sqlData, sqlParams...); err == nil {
|
if err = dao.GetRows(db, &skuNamesInfo.SkuNames, sqlData, sqlParams...); err == nil {
|
||||||
skuNamesInfo.TotalCount = dao.GetLastTotalRowCount(db)
|
skuNamesInfo.TotalCount = dao.GetLastTotalRowCount(db)
|
||||||
dao.Commit(db)
|
dao.Commit(db)
|
||||||
|
|
||||||
var skuIDs []int
|
// var skuIDs []int
|
||||||
for _, skuName := range skuNamesInfo.SkuNames {
|
for _, skuName := range skuNamesInfo.SkuNames {
|
||||||
skuName.FullName = jxutils.ComposeSkuName(skuName.Prefix, skuName.Name, "", "", 0, "", 0, skuName.ExPrefix, skuName.ExPrefixBegin, skuName.ExPrefixEnd)
|
skuName.FullName = jxutils.ComposeSkuName(skuName.Prefix, skuName.Name, "", "", 0, "", 0, skuName.ExPrefix, skuName.ExPrefixBegin, skuName.ExPrefixEnd)
|
||||||
if skuName.SkusStr != "" {
|
// if skuName.SkusStr != "" {
|
||||||
if err = utils.UnmarshalUseNumber([]byte(skuName.SkusStr), &skuName.Skus); err != nil {
|
// if err = utils.UnmarshalUseNumber([]byte(skuName.SkusStr), &skuName.Skus); err != nil {
|
||||||
dao.Rollback(db)
|
// dao.Rollback(db)
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
for _, v := range skuName.Skus {
|
// for _, v := range skuName.Skus {
|
||||||
skuIDs = append(skuIDs, v.ID)
|
// skuIDs = append(skuIDs, v.ID)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if skuName.PlacesStr != "" {
|
// if skuName.PlacesStr != "" {
|
||||||
if err = utils.UnmarshalUseNumber([]byte(skuName.PlacesStr), &skuName.Places); err != nil {
|
// if err = utils.UnmarshalUseNumber([]byte(skuName.PlacesStr), &skuName.Places); err != nil {
|
||||||
dao.Rollback(db)
|
// dao.Rollback(db)
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
skuVendorCats, _ := dao.GetSkuVendorCategoryMaps(db, []int{skuName.ID}, []int{model.VendorIDMTWM, model.VendorIDEBAI, model.VendorIDJDShop, model.VendorIDJD}, nil)
|
skuVendorCats, _ := dao.GetSkuVendorCategoryMaps(db, []int{skuName.ID}, []int{model.VendorIDMTWM, model.VendorIDEBAI, model.VendorIDJDShop, model.VendorIDJD}, nil)
|
||||||
if len(skuVendorCats) > 0 {
|
if len(skuVendorCats) > 0 {
|
||||||
for _, v := range skuVendorCats {
|
for _, v := range skuVendorCats {
|
||||||
@@ -739,15 +679,42 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku, isQueryMidPric
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
var skus []*model.Sku
|
||||||
|
sql := `
|
||||||
|
SELECT * FROM sku WHERE deleted_at = ? AND name_id = ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{utils.DefaultTimeValue, skuName.ID}
|
||||||
|
if err = dao.GetRows(db, &skus, sql, sqlParams); err == nil {
|
||||||
|
var skusVendors []*model.SkuWithVendor
|
||||||
|
for _, v := range skus {
|
||||||
|
skusVendor := &model.SkuWithVendor{
|
||||||
|
Sku: v,
|
||||||
}
|
}
|
||||||
if len(skuIDs) > 0 {
|
skusVendors = append(skusVendors, skusVendor)
|
||||||
thingMapMap, err2 := dao.GetThingMapMap(db, model.ThingTypeSku, nil, skuIDs)
|
|
||||||
if err = err2; err == nil {
|
|
||||||
for _, skuName := range skuNamesInfo.SkuNames {
|
|
||||||
for _, v := range skuName.Skus {
|
|
||||||
v.MapList = thingMapMap[int64(v.ID)]
|
|
||||||
}
|
}
|
||||||
|
skuName.Skus = skusVendors
|
||||||
|
// thingMapMap, err2 := dao.GetThingMapMap(db, model.ThingTypeSku, nil, nil)
|
||||||
|
// if err = err2; err == nil {
|
||||||
|
// for _, skuName := range skuNamesInfo.SkuNames {
|
||||||
|
// for _, v := range skuName.Skus {
|
||||||
|
// v.MapList = thingMapMap[int64(v.ID)]
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
var (
|
||||||
|
places []*model.SkuNamePlaceBind
|
||||||
|
placeCodes []int
|
||||||
|
)
|
||||||
|
sql2 := `
|
||||||
|
SELECT * FROM sku_name_place_bind WHERE name_id = ?
|
||||||
|
`
|
||||||
|
sqlParams2 := []interface{}{skuName.ID}
|
||||||
|
if err = dao.GetRows(db, &places, sql2, sqlParams2); err == nil {
|
||||||
|
for _, v := range places {
|
||||||
|
placeCodes = append(placeCodes, v.PlaceCode)
|
||||||
|
}
|
||||||
|
skuName.Places = placeCodes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -850,7 +817,7 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s
|
|||||||
}
|
}
|
||||||
|
|
||||||
picType := true
|
picType := true
|
||||||
for _, imgName := range []string{skuNameExt.Img, skuNameExt.Img2} {
|
for _, imgName := range []string{skuNameExt.Img, skuNameExt.Img2, skuNameExt.Img3, skuNameExt.Img4, skuNameExt.Img5} {
|
||||||
if imgName != "" {
|
if imgName != "" {
|
||||||
dataRes, err2 := datares.TryRegisterDataResource(ctx, skuNameExt.Name, imgName, model.ImgTypeMain, false)
|
dataRes, err2 := datares.TryRegisterDataResource(ctx, skuNameExt.Name, imgName, model.ImgTypeMain, false)
|
||||||
if err = err2; err != nil {
|
if err = err2; err != nil {
|
||||||
@@ -973,7 +940,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
globals.SugarLogger.Debugf("UpdateSkuName valid:%s", utils.Format4Output(valid, false))
|
globals.SugarLogger.Debugf("UpdateSkuName valid:%s", utils.Format4Output(valid, false))
|
||||||
for _, imgName := range []string{"img", "img2", "img3"} {
|
for _, imgName := range []string{"img", "img2", "img3", "img4", "img5"} {
|
||||||
if valid[imgName] != nil {
|
if valid[imgName] != nil {
|
||||||
if imgStr := utils.Interface2String(valid[imgName]); imgStr != "" {
|
if imgStr := utils.Interface2String(valid[imgName]); imgStr != "" {
|
||||||
_, err2 := datares.TryRegisterDataResource(ctx, skuName.Name, valid[imgName].(string), model.ImgTypeMain, true)
|
_, err2 := datares.TryRegisterDataResource(ctx, skuName.Name, valid[imgName].(string), model.ImgTypeMain, true)
|
||||||
@@ -1656,6 +1623,27 @@ func GetJdUpcCodeByName(ctx *jxcontext.Context, name, upcCode string) (productIn
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
productInfos, err = GetJdUpcCodeByCode(ctx, upcCode)
|
productInfos, err = GetJdUpcCodeByCode(ctx, upcCode)
|
||||||
|
if len(productInfos) == 0 {
|
||||||
|
if configs, err := dao.QueryConfigs(dao.GetDB(), "mtwmCookieStr", model.ConfigTypeCookie, ""); err == nil {
|
||||||
|
api.MtwmAPI.SetCookieWithStr(configs[0].Value)
|
||||||
|
}
|
||||||
|
if result, err := api.MtwmAPI.GetStandardProductListWithCond(upcCode); err == nil && result != nil {
|
||||||
|
productInfo := &jdapi.ProductInfo{
|
||||||
|
OriginalName: result.Name,
|
||||||
|
OriginalSpec: result.Spec,
|
||||||
|
}
|
||||||
|
// _, name, _, specUnit, unit, specQuality := jxutils.SplitSkuName(productInfo.OriginalName)
|
||||||
|
productInfo.Name = name
|
||||||
|
productInfo.SpecUnit = result.SpecUnit
|
||||||
|
productInfo.Unit = result.Unit
|
||||||
|
productInfo.SpecQuality = float32(result.SpecNew)
|
||||||
|
productInfo.ImgList = strings.Split(result.Pic, ",")
|
||||||
|
productInfo.Weight = float32(result.Weight)
|
||||||
|
productInfo.Price = result.AvgPrice
|
||||||
|
productInfo.BrandName = result.BrandNamePath
|
||||||
|
productInfos = append(productInfos, productInfo)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return productInfos, err
|
return productInfos, err
|
||||||
}
|
}
|
||||||
@@ -2108,24 +2096,6 @@ func CreateUpcSkuByExcelBin(ctx *jxcontext.Context, reader io.Reader, categoryID
|
|||||||
return retVal, err
|
return retVal, err
|
||||||
}
|
}
|
||||||
skuName.Img = downloadURL
|
skuName.Img = downloadURL
|
||||||
// if resBinary, _, err := jxutils.DownloadFileByURL(result.Img); err == nil {
|
|
||||||
// if downloadURL, err := jxutils.UploadExportContent(resBinary, utils.Int64ToStr(time.Now().Unix())+"origin"+result.Img[strings.LastIndex(result.Img, "/")+1:len(result.Img)]); err == nil {
|
|
||||||
// resBinary2, _, err := jxutils.DownloadFileByURL(downloadURL + model.SkuNameImgStandard)
|
|
||||||
// downloadURL2, err := jxutils.UploadExportContent(resBinary2, utils.Int64ToStr(time.Now().Unix())+downloadURL[strings.LastIndex(downloadURL, "/")+1:len(downloadURL)])
|
|
||||||
// if err == nil {
|
|
||||||
// skuName.Img = downloadURL2
|
|
||||||
// } else {
|
|
||||||
// retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
|
|
||||||
// return retVal, err
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
|
|
||||||
// return retVal, err
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
|
|
||||||
// return retVal, err
|
|
||||||
// }
|
|
||||||
} else {
|
} else {
|
||||||
skuName.Img = model.NOSkuNameImg
|
skuName.Img = model.NOSkuNameImg
|
||||||
}
|
}
|
||||||
@@ -2291,7 +2261,7 @@ func CreateUpcSkuByExcelBin(ctx *jxcontext.Context, reader io.Reader, categoryID
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(productInfo.ImgList) > 0 {
|
if len(productInfo.ImgList) > 0 {
|
||||||
skuName.Img = productInfo.ImgList[0]
|
setImgs(skuName, productInfo.ImgList)
|
||||||
} else {
|
} else {
|
||||||
skuName.Img = model.NOSkuNameImg
|
skuName.Img = model.NOSkuNameImg
|
||||||
}
|
}
|
||||||
@@ -2306,45 +2276,6 @@ func CreateUpcSkuByExcelBin(ctx *jxcontext.Context, reader io.Reader, categoryID
|
|||||||
retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, fmt.Sprintf("暂不支持的图片格式:[%v]", skuName.Img))}
|
retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, fmt.Sprintf("暂不支持的图片格式:[%v]", skuName.Img))}
|
||||||
return retVal, err
|
return retVal, err
|
||||||
}
|
}
|
||||||
//需要把图片传到七牛云上
|
|
||||||
if !strings.Contains(skuName.Img, "image.jxc4.com") {
|
|
||||||
downloadURL, err := uploadImgStandard(skuName.Img)
|
|
||||||
if err != nil {
|
|
||||||
retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
|
|
||||||
return retVal, err
|
|
||||||
}
|
|
||||||
skuName.Img = downloadURL
|
|
||||||
// if resBinary, _, err := jxutils.DownloadFileByURL(skuName.Img); err == nil {
|
|
||||||
// if downloadURL, err := jxutils.UploadExportContent(resBinary, utils.Int64ToStr(time.Now().Unix())+"origin"+skuName.Img[strings.LastIndex(skuName.Img, "/")+1:len(skuName.Img)]); err == nil {
|
|
||||||
// if img, _, err := datares.Binary2Image(resBinary, http.DetectContentType(resBinary)); err == nil {
|
|
||||||
// if img.Bounds().Dx() != datares.MainImgWidth || img.Bounds().Dy() != datares.MainImgHeight {
|
|
||||||
// if resBinary2, _, err := jxutils.DownloadFileByURL(downloadURL + model.SkuNameImgStandard); err == nil {
|
|
||||||
// if downloadURL2, err := jxutils.UploadExportContent(resBinary2, utils.Int64ToStr(time.Now().Unix())+skuName.Img[strings.LastIndex(skuName.Img, "/")+1:len(skuName.Img)]); err == nil {
|
|
||||||
// skuName.Img = downloadURL2
|
|
||||||
// } else {
|
|
||||||
// retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
|
|
||||||
// return retVal, err
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
|
|
||||||
// return retVal, err
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// skuName.Img = downloadURL
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
|
|
||||||
// return retVal, err
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
|
|
||||||
// return retVal, err
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
|
|
||||||
// return retVal, err
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
skuName.Status = model.SkuStatusNormal
|
skuName.Status = model.SkuStatusNormal
|
||||||
skuName.IsGlobal = model.YES
|
skuName.IsGlobal = model.YES
|
||||||
if categoryID == 0 {
|
if categoryID == 0 {
|
||||||
@@ -2353,6 +2284,68 @@ func CreateUpcSkuByExcelBin(ctx *jxcontext.Context, reader io.Reader, categoryID
|
|||||||
skuName.CategoryID = categoryID
|
skuName.CategoryID = categoryID
|
||||||
}
|
}
|
||||||
skuName.Skus[0].Status = model.SkuStatusNormal
|
skuName.Skus[0].Status = model.SkuStatusNormal
|
||||||
|
if skuName.Img == model.NOSkuNameImg {
|
||||||
|
if configs, err := dao.QueryConfigs(dao.GetDB(), "mtwmCookieStr", model.ConfigTypeCookie, ""); err == nil {
|
||||||
|
api.MtwmAPI.SetCookieWithStr(configs[0].Value)
|
||||||
|
}
|
||||||
|
result, _ := api.MtwmAPI.GetStandardProductListWithCond(*skuName.Upc)
|
||||||
|
if result != nil {
|
||||||
|
imgs := strings.Split(result.Pic, ",")
|
||||||
|
setImgs(skuName, imgs)
|
||||||
|
} else {
|
||||||
|
retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, "美团cookie过期了吧")}
|
||||||
|
return retVal, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//需要把图片传到七牛云上, 很难受
|
||||||
|
if !strings.Contains(skuName.Img, "image.jxc4.com") {
|
||||||
|
downloadURL, err := uploadImgStandard(skuName.Img)
|
||||||
|
if err != nil {
|
||||||
|
retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
|
||||||
|
return retVal, err
|
||||||
|
}
|
||||||
|
skuName.Img = downloadURL
|
||||||
|
}
|
||||||
|
if skuName.Img2 != "" {
|
||||||
|
if !strings.Contains(skuName.Img2, "image.jxc4.com") {
|
||||||
|
downloadURL, err := uploadImgStandard(skuName.Img2)
|
||||||
|
if err != nil {
|
||||||
|
retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
|
||||||
|
return retVal, err
|
||||||
|
}
|
||||||
|
skuName.Img2 = downloadURL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if skuName.Img3 != "" {
|
||||||
|
if !strings.Contains(skuName.Img3, "image.jxc4.com") {
|
||||||
|
downloadURL, err := uploadImgStandard(skuName.Img3)
|
||||||
|
if err != nil {
|
||||||
|
retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
|
||||||
|
return retVal, err
|
||||||
|
}
|
||||||
|
skuName.Img3 = downloadURL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if skuName.Img4 != "" {
|
||||||
|
if !strings.Contains(skuName.Img4, "image.jxc4.com") {
|
||||||
|
downloadURL, err := uploadImgStandard(skuName.Img4)
|
||||||
|
if err != nil {
|
||||||
|
retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
|
||||||
|
return retVal, err
|
||||||
|
}
|
||||||
|
skuName.Img4 = downloadURL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if skuName.Img5 != "" {
|
||||||
|
if !strings.Contains(skuName.Img5, "image.jxc4.com") {
|
||||||
|
downloadURL, err := uploadImgStandard(skuName.Img5)
|
||||||
|
if err != nil {
|
||||||
|
retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
|
||||||
|
return retVal, err
|
||||||
|
}
|
||||||
|
skuName.Img5 = downloadURL
|
||||||
|
}
|
||||||
|
}
|
||||||
_, err = AddSkuName(ctx, skuName, ctx.GetUserName())
|
_, err = AddSkuName(ctx, skuName, ctx.GetUserName())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
|
retVal = []*CreateUpcSkuByExcelErr{buildCreateUpcSkuByExcelErr(v, err.Error())}
|
||||||
@@ -2863,6 +2856,29 @@ func UpdateVendorCategoryMap(ctx *jxcontext.Context, ID int, vendorCategoryMap *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
var countInfos []*struct{ Ct int }
|
||||||
|
db := dao.GetDB()
|
||||||
|
if err = dao.GetRows(db, &countInfos, `
|
||||||
|
SELECT COUNT(*) ct
|
||||||
|
FROM sku t1
|
||||||
|
WHERE t1.category_id = ? AND t1.deleted_at = ?
|
||||||
|
UNION ALL
|
||||||
|
SELECT COUNT(*) ct
|
||||||
|
FROM sku_name t1
|
||||||
|
WHERE t1.category_id = ? AND t1.deleted_at = ?
|
||||||
|
UNION ALL
|
||||||
|
SELECT COUNT(*) ct
|
||||||
|
FROM sku_category t1
|
||||||
|
WHERE t1.parent_id = ? AND t1.deleted_at = ?
|
||||||
|
`, vendorCategoryMap2.CategoryID, utils.DefaultTimeValue, vendorCategoryMap2.CategoryID, utils.DefaultTimeValue, vendorCategoryMap2.CategoryID, utils.DefaultTimeValue, &countInfos); err == nil {
|
||||||
|
if countInfos[0].Ct != 0 {
|
||||||
|
return 0, errors.New("还有商品使用此类别,不能删除")
|
||||||
|
} else if countInfos[1].Ct != 0 {
|
||||||
|
return 0, errors.New("还有商品名使用此类别,不能删除")
|
||||||
|
} else if countInfos[2].Ct != 0 {
|
||||||
|
return 0, errors.New("还有商品类别使用此类别,不能删除")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
vendorOrgCodes, err := dao.GetVendorOrgCode(db, vendorCategoryMap2.VendorID, vendorCategoryMap2.VendorOrgCode, model.VendorOrgTypePlatform)
|
vendorOrgCodes, err := dao.GetVendorOrgCode(db, vendorCategoryMap2.VendorID, vendorCategoryMap2.VendorOrgCode, model.VendorOrgTypePlatform)
|
||||||
dao.Begin(db)
|
dao.Begin(db)
|
||||||
@@ -2933,6 +2949,9 @@ func LoadStoreVendorCategories(ctx *jxcontext.Context, vendorOrgCode string, ven
|
|||||||
return fmt.Errorf("未查询到该门店有门店分类,请重新选择! [%v]", storeID)
|
return fmt.Errorf("未查询到该门店有门店分类,请重新选择! [%v]", storeID)
|
||||||
}
|
}
|
||||||
vendorOrgCodes, _ := dao.GetVendorOrgCode(db, vendorID, vendorOrgCode, model.VendorOrgTypePlatform)
|
vendorOrgCodes, _ := dao.GetVendorOrgCode(db, vendorID, vendorOrgCode, model.VendorOrgTypePlatform)
|
||||||
|
if vendorCatMap, _ := dao.GetVendorCategoryMap(db, -1, 0, vendorID, vendorOrgCode, 0); len(vendorCatMap) > 0 {
|
||||||
|
return fmt.Errorf("该账号下已有分类,请在这里修改!")
|
||||||
|
}
|
||||||
dao.Begin(db)
|
dao.Begin(db)
|
||||||
defer func() {
|
defer func() {
|
||||||
if r := recover(); r != nil {
|
if r := recover(); r != nil {
|
||||||
@@ -2977,5 +2996,136 @@ func LoadStoreVendorCategories(ctx *jxcontext.Context, vendorOrgCode string, ven
|
|||||||
OnCreateThing(ctx, db, vendorOrgCodes, int64(v.CategoryID), model.ThingTypeCategory, model.SyncFlagNewMask, true)
|
OnCreateThing(ctx, db, vendorOrgCodes, int64(v.CategoryID), model.ThingTypeCategory, model.SyncFlagNewMask, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if _, err = SyncCategories(ctx, nil, []int{vendorID}, []string{vendorOrgCode}, nil, false); err == nil {
|
||||||
|
SyncReorderCategories2(ctx, 0, vendorID, vendorOrgCode)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func RefreshNoImgSku(ctx *jxcontext.Context) (err error) {
|
||||||
|
var (
|
||||||
|
db = dao.GetDB()
|
||||||
|
skuNames []*model.SkuName
|
||||||
|
)
|
||||||
|
sql := `
|
||||||
|
SELECT * FROM sku_name WHERE deleted_at = ? AND upc <> '' AND img2 = ''
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
}
|
||||||
|
dao.GetRows(db, &skuNames, sql, sqlParams)
|
||||||
|
task := tasksch.NewParallelTask("uuuuu", tasksch.NewParallelConfig().SetParallelCount(20).SetIsContinueWhenError(true), ctx,
|
||||||
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
v := batchItemList[0].(*model.SkuName)
|
||||||
|
if v.Upc != nil {
|
||||||
|
productInfos, _ := api.JdAPI.GetJdUpcCodeByName("", *v.Upc, 1, 30)
|
||||||
|
if len(productInfos) > 0 {
|
||||||
|
productInfo := productInfos[0]
|
||||||
|
if len(productInfo.ImgList) >= 5 {
|
||||||
|
v.Img = productInfo.ImgList[0]
|
||||||
|
v.Img2 = productInfo.ImgList[1]
|
||||||
|
v.Img3 = productInfo.ImgList[2]
|
||||||
|
v.Img4 = productInfo.ImgList[3]
|
||||||
|
v.Img5 = productInfo.ImgList[4]
|
||||||
|
} else {
|
||||||
|
result, _ := api.MtwmAPI.GetStandardProductListWithCond(*v.Upc)
|
||||||
|
if result != nil {
|
||||||
|
imgs := strings.Split(result.Pic, ",")
|
||||||
|
if len(imgs) >= 5 {
|
||||||
|
v.Img = imgs[0]
|
||||||
|
v.Img2 = imgs[1]
|
||||||
|
v.Img3 = imgs[2]
|
||||||
|
v.Img4 = imgs[3]
|
||||||
|
v.Img5 = imgs[4]
|
||||||
|
} else {
|
||||||
|
if len(imgs) > len(productInfo.ImgList) {
|
||||||
|
setImgs2(v, imgs)
|
||||||
|
} else {
|
||||||
|
setImgs2(v, productInfo.ImgList)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setImgs2(v, productInfo.ImgList)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
result, _ := api.MtwmAPI.GetStandardProductListWithCond(*v.Upc)
|
||||||
|
if result != nil {
|
||||||
|
imgs := strings.Split(result.Pic, ",")
|
||||||
|
setImgs2(v, imgs)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dao.UpdateEntity(db, v, "Img", "Img2", "Img3", "Img4", "Img5")
|
||||||
|
}
|
||||||
|
return retVal, err
|
||||||
|
}, skuNames)
|
||||||
|
tasksch.HandleTask(task, nil, true).Run()
|
||||||
|
_, err = task.GetResult(0)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func setImgs(v *model.SkuNameExt, imgs []string) (err error) {
|
||||||
|
switch len(imgs) {
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
v.Img = imgs[0]
|
||||||
|
case 2:
|
||||||
|
v.Img = imgs[0]
|
||||||
|
v.Img2 = imgs[1]
|
||||||
|
case 3:
|
||||||
|
v.Img = imgs[0]
|
||||||
|
v.Img2 = imgs[1]
|
||||||
|
v.Img3 = imgs[2]
|
||||||
|
case 4:
|
||||||
|
v.Img = imgs[0]
|
||||||
|
v.Img2 = imgs[1]
|
||||||
|
v.Img3 = imgs[2]
|
||||||
|
v.Img4 = imgs[3]
|
||||||
|
case 5:
|
||||||
|
v.Img = imgs[0]
|
||||||
|
v.Img2 = imgs[1]
|
||||||
|
v.Img3 = imgs[2]
|
||||||
|
v.Img4 = imgs[3]
|
||||||
|
v.Img5 = imgs[4]
|
||||||
|
default:
|
||||||
|
v.Img = imgs[0]
|
||||||
|
v.Img2 = imgs[1]
|
||||||
|
v.Img3 = imgs[2]
|
||||||
|
v.Img4 = imgs[3]
|
||||||
|
v.Img5 = imgs[4]
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func setImgs2(v *model.SkuName, imgs []string) (err error) {
|
||||||
|
switch len(imgs) {
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
v.Img = imgs[0]
|
||||||
|
case 2:
|
||||||
|
v.Img = imgs[0]
|
||||||
|
v.Img2 = imgs[1]
|
||||||
|
case 3:
|
||||||
|
v.Img = imgs[0]
|
||||||
|
v.Img2 = imgs[1]
|
||||||
|
v.Img3 = imgs[2]
|
||||||
|
case 4:
|
||||||
|
v.Img = imgs[0]
|
||||||
|
v.Img2 = imgs[1]
|
||||||
|
v.Img3 = imgs[2]
|
||||||
|
v.Img4 = imgs[3]
|
||||||
|
case 5:
|
||||||
|
v.Img = imgs[0]
|
||||||
|
v.Img2 = imgs[1]
|
||||||
|
v.Img3 = imgs[2]
|
||||||
|
v.Img4 = imgs[3]
|
||||||
|
v.Img5 = imgs[4]
|
||||||
|
default:
|
||||||
|
v.Img = imgs[0]
|
||||||
|
v.Img2 = imgs[1]
|
||||||
|
v.Img3 = imgs[2]
|
||||||
|
v.Img4 = imgs[3]
|
||||||
|
v.Img5 = imgs[4]
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/jx-callback/business/auth2"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxstore/permission"
|
"git.rosy.net.cn/jx-callback/business/jxstore/permission"
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/business/authz"
|
"git.rosy.net.cn/jx-callback/business/authz"
|
||||||
@@ -183,33 +185,33 @@ var (
|
|||||||
"payeeBankCode": "开户行代码",
|
"payeeBankCode": "开户行代码",
|
||||||
"payPercentage": "支付比例",
|
"payPercentage": "支付比例",
|
||||||
}
|
}
|
||||||
roleMoblieMap = map[string]string{
|
// roleMoblieMap = map[string]string{
|
||||||
"17380734342": "17380734342", //漆云的手机 ,用于判断updatestore的权限
|
// "17380734342": "17380734342", //漆云的手机 ,用于判断updatestore的权限
|
||||||
"18328080405": "18328080405", //肖娜娜的手机
|
// "18328080405": "18328080405", //肖娜娜的手机
|
||||||
"13350726500": "13350726500", //谭翔心
|
// "13350726500": "13350726500", //谭翔心
|
||||||
"15928865396": "15928865396", //何佳梦
|
// "15928865396": "15928865396", //何佳梦
|
||||||
"18048531223": "18048531223", //石老板
|
// "18048531223": "18048531223", //石老板
|
||||||
"18982250714": "18982250714", //赵敏夫
|
// "18982250714": "18982250714", //赵敏夫
|
||||||
"13708196093": "13708196093", //顾子航
|
// "13708196093": "13708196093", //顾子航
|
||||||
"15680070110": "15680070110", //李荣维
|
// "15680070110": "15680070110", //李荣维
|
||||||
"15208271238": "15208271238",
|
// "15208271238": "15208271238",
|
||||||
}
|
// }
|
||||||
|
|
||||||
marketManPhoneRoleMap = map[string]string{
|
marketManPhoneRoleMap = map[string]string{
|
||||||
"marketManPhone": "市场负责人电话",
|
"marketManPhone": "市场负责人电话",
|
||||||
}
|
}
|
||||||
|
|
||||||
marketManPhoneRoleMoblieMap = map[string]string{
|
// marketManPhoneRoleMoblieMap = map[string]string{
|
||||||
"13684045763": "13684045763",
|
// "13684045763": "13684045763",
|
||||||
"18160030913": "18160030913",
|
// "18160030913": "18160030913",
|
||||||
"18048531223": "18048531223",
|
// "18048531223": "18048531223",
|
||||||
"18328080405": "18328080405",
|
// "18328080405": "18328080405",
|
||||||
"17380734342": "17380734342",
|
// "17380734342": "17380734342",
|
||||||
"15208271238": "15208271238",
|
// "15208271238": "15208271238",
|
||||||
"18583684218": "18583684218",
|
// "18583684218": "18583684218",
|
||||||
"18982250714": "18982250714",
|
// "18982250714": "18982250714",
|
||||||
"13708196093": "13708196093",
|
// "13708196093": "13708196093",
|
||||||
}
|
// }
|
||||||
)
|
)
|
||||||
|
|
||||||
func getStoresSql(ctx *jxcontext.Context, keyword string, params map[string]interface{}, orderTimeFrom, orderTimeTo time.Time) (sql string, sqlParams []interface{}, sqlFrom string, sqlFromParams []interface{}, err error) {
|
func getStoresSql(ctx *jxcontext.Context, keyword string, params map[string]interface{}, orderTimeFrom, orderTimeTo time.Time) (sql string, sqlParams []interface{}, sqlFrom string, sqlFromParams []interface{}, err error) {
|
||||||
@@ -921,20 +923,26 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa
|
|||||||
}
|
}
|
||||||
|
|
||||||
for k, _ := range valid {
|
for k, _ := range valid {
|
||||||
if roleMap[k] != "" {
|
if roleMap[k] != "" || marketManPhoneRoleMap[k] != "" {
|
||||||
if authInfo, err := ctx.GetV2AuthInfo(); err == nil {
|
menus, _ := dao.GetMenuWithUser(dao.GetDB(), "结算权限", 0, 1, ctx.GetUserID())
|
||||||
if roleMoblieMap[authInfo.Mobile] == "" {
|
if len(menus) == 0 {
|
||||||
return 0, errors.New(fmt.Sprintf("当前用户 [%v] 无权限修改 [%v] 字段!", authInfo.Name, roleMap[k]))
|
return 0, errors.New(fmt.Sprintf("当前用户 [%v] 无权限修改此字段!", ctx.GetUserName()))
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if marketManPhoneRoleMap[k] != "" {
|
|
||||||
if authInfo, err := ctx.GetV2AuthInfo(); err == nil {
|
|
||||||
if marketManPhoneRoleMoblieMap[authInfo.Mobile] == "" {
|
|
||||||
return 0, errors.New(fmt.Sprintf("当前用户 [%v] 无权限修改 [%v] 字段!", authInfo.Name, roleMap[k]))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// if roleMap[k] != "" {
|
||||||
|
// if authInfo, err := ctx.GetV2AuthInfo(); err == nil {
|
||||||
|
// if roleMoblieMap[authInfo.Mobile] == "" {
|
||||||
|
// return 0, errors.New(fmt.Sprintf("当前用户 [%v] 无权限修改 [%v] 字段!", authInfo.Name, roleMap[k]))
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if marketManPhoneRoleMap[k] != "" {
|
||||||
|
// if authInfo, err := ctx.GetV2AuthInfo(); err == nil {
|
||||||
|
// if marketManPhoneRoleMoblieMap[authInfo.Mobile] == "" {
|
||||||
|
// return 0, errors.New(fmt.Sprintf("当前用户 [%v] 无权限修改 [%v] 字段!", authInfo.Name, roleMap[k]))
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
// districtCode := 0
|
// districtCode := 0
|
||||||
@@ -1198,15 +1206,16 @@ func AddStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, vendorID int, vend
|
|||||||
if store != nil {
|
if store != nil {
|
||||||
storeMap.DeliveryType = store.DeliveryType
|
storeMap.DeliveryType = store.DeliveryType
|
||||||
storeMap.Status = store.Status
|
storeMap.Status = store.Status
|
||||||
|
storeMap.VendorStoreName = store.Name
|
||||||
}
|
}
|
||||||
err = nil
|
err = nil
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//美团商超获取token
|
//美团商超获取token
|
||||||
mtapi := apimanager.CurAPIManager.GetAPI(model.VendorIDMTWM, outStoreMap.VendorOrgCode).(*mtwmapi.API)
|
mtapi := apimanager.CurAPIManager.GetAPI(model.VendorIDMTWM, storeMap.VendorOrgCode).(*mtwmapi.API)
|
||||||
if token, err := mtapi.GetAccessToken2(outStoreMap.VendorStoreID); err == nil && token != nil {
|
if token, err := mtapi.GetAccessToken2(storeMap.VendorStoreID); err == nil && token != nil {
|
||||||
storeMap.MtwmToken = token.AccessToken
|
storeMap.MtwmToken = token.AccessToken
|
||||||
storeMap.MtwmToken = token.RefreshToken
|
storeMap.MtwmRefreshToken = token.RefreshToken
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
storeMap.SyncStatus = model.SyncFlagModifiedMask | model.SyncFlagStoreName | model.SyncFlagStoreAddress // 新增绑定门店是修改的概念
|
storeMap.SyncStatus = model.SyncFlagModifiedMask | model.SyncFlagStoreName | model.SyncFlagStoreAddress // 新增绑定门店是修改的概念
|
||||||
@@ -1225,7 +1234,6 @@ func AddStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, vendorID int, vend
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
} else if vendorID == model.VendorIDJDShop {
|
} else if vendorID == model.VendorIDJDShop {
|
||||||
storeMap.VendorOrgCode = "1"
|
|
||||||
if storeMap.VendorStoreID == "" {
|
if storeMap.VendorStoreID == "" {
|
||||||
storeMap.SyncStatus = model.SyncFlagNewMask //京东商城要去建店
|
storeMap.SyncStatus = model.SyncFlagNewMask //京东商城要去建店
|
||||||
} else {
|
} else {
|
||||||
@@ -1262,11 +1270,6 @@ func AddStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, vendorID int, vend
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
if err = dao.CreateEntity(db, storeMap); err == nil {
|
if err = dao.CreateEntity(db, storeMap); err == nil {
|
||||||
if vendorID == model.VendorIDJDShop {
|
|
||||||
storeMap2 := storeMap
|
|
||||||
storeMap2.VendorOrgCode = "2"
|
|
||||||
dao.CreateEntity(db, storeMap2)
|
|
||||||
}
|
|
||||||
dao.Commit(db)
|
dao.Commit(db)
|
||||||
outStoreMap = storeMap
|
outStoreMap = storeMap
|
||||||
} else {
|
} else {
|
||||||
@@ -1539,6 +1542,9 @@ func TmpGetJxBadCommentsByStoreId(ctx *jxcontext.Context, keyword string, storeI
|
|||||||
storeIDs2 = append(storeIDs2, v)
|
storeIDs2 = append(storeIDs2, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(storeIDs2) == 0 {
|
||||||
|
storeIDs2 = append(storeIDs2, -1)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
for k, _ := range storeIDsMap {
|
for k, _ := range storeIDsMap {
|
||||||
storeIDs2 = append(storeIDs2, k)
|
storeIDs2 = append(storeIDs2, k)
|
||||||
@@ -2846,6 +2852,9 @@ func GetStorePriceScore(ctx *jxcontext.Context, storeIDs, vendorIDs []int, fromS
|
|||||||
storeIDs2 = append(storeIDs2, v)
|
storeIDs2 = append(storeIDs2, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(storeIDs2) == 0 {
|
||||||
|
storeIDs2 = append(storeIDs2, -1)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
for k, _ := range storeIDsMap {
|
for k, _ := range storeIDsMap {
|
||||||
storeIDs2 = append(storeIDs2, k)
|
storeIDs2 = append(storeIDs2, k)
|
||||||
@@ -3170,6 +3179,13 @@ func GetStoreCategoryMap(ctx *jxcontext.Context, parentID, level int, storeID in
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if ctx.GetLoginType() != weixin.AuthTypeMP && ctx.GetLoginType() != weixin.AuthTypeMini && ctx.GetLoginType() != weixin.AuthTypeWxApp && ctx.GetLoginType() != auth2.AuthTypeMobile {
|
||||||
|
return storeCatMaps, err
|
||||||
|
}
|
||||||
|
//表示没有门店分类
|
||||||
|
if len(storeCatMaps) == 0 {
|
||||||
|
storeCatMaps, err = dao.GetCategoriesForStore(db, parentID, 0, nil)
|
||||||
|
}
|
||||||
return storeCatMaps, err
|
return storeCatMaps, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3260,36 +3276,36 @@ func UpdateStoreCategoryMap(ctx *jxcontext.Context, ID int, storeCategoryMap *mo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// var storeSkus []*model.StoreSkuBind
|
var storeSkus []*model.StoreSkuBind
|
||||||
// sql := `
|
sql := `
|
||||||
// SELECT a.*
|
SELECT a.*
|
||||||
// FROM store_sku_bind a
|
FROM store_sku_bind a
|
||||||
// JOIN sku b ON a.sku_id = b.id
|
JOIN sku b ON a.sku_id = b.id
|
||||||
// JOIN sku_name c ON c.id = b.name_id
|
JOIN sku_name c ON c.id = b.name_id
|
||||||
// WHERE a.deleted_at = ? AND b.deleted_at = ? AND c.deleted_at = ?
|
WHERE a.deleted_at = ? AND b.deleted_at = ? AND c.deleted_at = ?
|
||||||
// AND c.category_id = ? AND a.store_id = ?
|
AND c.category_id = ? AND a.store_id = ?
|
||||||
// UNION ALL
|
UNION ALL
|
||||||
// SELECT a.*
|
SELECT a.*
|
||||||
// FROM store_sku_bind a
|
FROM store_sku_bind a
|
||||||
// JOIN sku b ON a.sku_id = b.id
|
JOIN sku b ON a.sku_id = b.id
|
||||||
// JOIN sku_name c ON c.id = b.name_id
|
JOIN sku_name c ON c.id = b.name_id
|
||||||
// JOIN sku_category d ON d.id = c.category_id
|
JOIN sku_category d ON d.id = c.category_id
|
||||||
// JOIN sku_category e ON e.id = d.parent_id
|
JOIN sku_category e ON e.id = d.parent_id
|
||||||
// WHERE a.deleted_at = ? AND b.deleted_at = ? AND c.deleted_at = ?
|
WHERE a.deleted_at = ? AND b.deleted_at = ? AND c.deleted_at = ?
|
||||||
// AND e.id = ? AND a.store_id = ?
|
AND e.id = ? AND a.store_id = ?
|
||||||
// `
|
`
|
||||||
// sqlParams := []interface{}{
|
sqlParams := []interface{}{
|
||||||
// utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue,
|
utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue,
|
||||||
// storeCategoryMap2.CategoryID, storeCategoryMap2.StoreID,
|
storeCategoryMap2.CategoryID, storeCategoryMap2.StoreID,
|
||||||
// utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue,
|
utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue,
|
||||||
// storeCategoryMap2.CategoryID, storeCategoryMap2.StoreID,
|
storeCategoryMap2.CategoryID, storeCategoryMap2.StoreID,
|
||||||
// }
|
}
|
||||||
// if err = dao.GetRows(db, &storeSkus, sql, sqlParams); err != nil {
|
if err = dao.GetRows(db, &storeSkus, sql, sqlParams); err != nil {
|
||||||
// return 0, err
|
return 0, err
|
||||||
// }
|
}
|
||||||
// if len(storeSkus) > 0 {
|
if len(storeSkus) > 0 {
|
||||||
// return 0, fmt.Errorf("该分类下或该分类的子分类下有关注的商品,不可删除!分类名:[%v]", storeCategoryMap2.StoreCategoryName)
|
return 0, fmt.Errorf("该分类下或该分类的子分类下有关注的商品,不可删除!分类名:[%v]", storeCategoryMap2.StoreCategoryName)
|
||||||
// }
|
}
|
||||||
catIDs = append(catIDs, storeCategoryMap.CategoryID)
|
catIDs = append(catIDs, storeCategoryMap.CategoryID)
|
||||||
SetStoreCategorySyncStatus2(db, []int{storeCategoryMap2.StoreID}, catIDs, model.SyncFlagModifiedMask)
|
SetStoreCategorySyncStatus2(db, []int{storeCategoryMap2.StoreID}, catIDs, model.SyncFlagModifiedMask)
|
||||||
} else {
|
} else {
|
||||||
@@ -4002,10 +4018,10 @@ func RefreshMTWMToken(ctx *jxcontext.Context) (err error) {
|
|||||||
var (
|
var (
|
||||||
db = dao.GetDB()
|
db = dao.GetDB()
|
||||||
)
|
)
|
||||||
if time.Now().YearDay()%20 != 0 {
|
if time.Now().YearDay()%10 != 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
//token是1个月过期,每20天刷一次吧
|
//token是1个月过期,每10天刷一次吧
|
||||||
storeMaps, _ := dao.GetStoresMapList(db, []int{model.VendorIDMTWM}, nil, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "", globals.Mtwm2Code)
|
storeMaps, _ := dao.GetStoresMapList(db, []int{model.VendorIDMTWM}, nil, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "", globals.Mtwm2Code)
|
||||||
for _, v := range storeMaps {
|
for _, v := range storeMaps {
|
||||||
if v.MtwmRefreshToken != "" {
|
if v.MtwmRefreshToken != "" {
|
||||||
@@ -4064,3 +4080,32 @@ func GetStoreAcctBalance(ctx *jxcontext.Context, storeID int) (storeAcct *model.
|
|||||||
AccountBalance: totalIncome - totalExpend,
|
AccountBalance: totalIncome - totalExpend,
|
||||||
}, err
|
}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// func SendVendorStoreStatusChanged(ctx *jxcontext.Context) (err error) {
|
||||||
|
// var (
|
||||||
|
// db = dao.GetDB()
|
||||||
|
// )
|
||||||
|
// dao.GetStoresMapList(db, []int{model.VendorIDJD, model.VendorIDMTWM, model.VendorIDEBAI}, nil, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "", "")
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
|
||||||
|
func RefreshStoreBind(ctx *jxcontext.Context) (err error) {
|
||||||
|
var (
|
||||||
|
db = dao.GetDB()
|
||||||
|
)
|
||||||
|
stores, err := dao.GetStoreList(db, nil, nil, []int{model.StoreStatusClosed, model.StoreStatusHaveRest, model.StoreStatusOpened}, nil, nil, "")
|
||||||
|
task := tasksch.NewParallelTask("RefreshStoreBind", tasksch.NewParallelConfig().SetParallelCount(5).SetIsContinueWhenError(true), ctx,
|
||||||
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
store := batchItemList[0].(*model.Store)
|
||||||
|
var userIDs []string
|
||||||
|
userList := getAllUsers4Store(ctx, db, store)
|
||||||
|
for _, v := range userList {
|
||||||
|
userIDs = append(userIDs, v.UserID)
|
||||||
|
}
|
||||||
|
err = AddUsers4Role(ctx, autils.NewRole(authz.StoreRoleBoss, store.ID), userIDs)
|
||||||
|
return retVal, err
|
||||||
|
}, stores)
|
||||||
|
tasksch.HandleTask(task, nil, true).Run()
|
||||||
|
task.GetID()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ type StoreSkuBindInfo struct {
|
|||||||
SubStoreID int `json:"subStoreID,omitempty"`
|
SubStoreID int `json:"subStoreID,omitempty"`
|
||||||
StatusSaleBegin int16 `json:"statusSaleBegin" validate:"max=2359,min=1,ltfield=StatusSaleEnd"` //商品可售时间范围
|
StatusSaleBegin int16 `json:"statusSaleBegin" validate:"max=2359,min=1,ltfield=StatusSaleEnd"` //商品可售时间范围
|
||||||
StatusSaleEnd int16 `json:"statusSaleEnd" validate:"max=2359,min=1"`
|
StatusSaleEnd int16 `json:"statusSaleEnd" validate:"max=2359,min=1"`
|
||||||
|
UPC string `json:"upc"`
|
||||||
Skus []*StoreSkuBindSkuInfo `json:"skus,omitempty"`
|
Skus []*StoreSkuBindSkuInfo `json:"skus,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -263,11 +264,163 @@ var (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetStoreSkus(ctx *jxcontext.Context, storeID int, skuIDs []int, isFocus bool, keyword string, isBySku, isAct bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *dao.StoreSkuNamesInfo, err error) {
|
func GetStoresSkusForStore(ctx *jxcontext.Context, storeID int, isFocus, isAct bool, keyword string, categoryID, status, offset, pageSize int) (skuNamesInfo *dao.StoreSkuNamesInfo, err error) {
|
||||||
return GetStoresSkus(ctx, []int{storeID}, skuIDs, isFocus, false, 0, keyword, isBySku, isAct, params, offset, pageSize)
|
//权限
|
||||||
|
if permission.IsRoled(ctx) {
|
||||||
|
if storeIDsMap, err := permission.GetUserStoresResultMap(ctx.GetUserID()); err == nil {
|
||||||
|
if storeIDsMap[storeID] == 0 {
|
||||||
|
return skuNamesInfo, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var (
|
||||||
|
sqlParams []interface{}
|
||||||
|
db = dao.GetDB()
|
||||||
|
SkuNames []*dao.StoreSkuNameExt
|
||||||
|
)
|
||||||
|
sql := `
|
||||||
|
SELECT SQL_CALC_FOUND_ROWS DISTINCT a.*, e.id store_id, c.unit_price
|
||||||
|
FROM sku_name a
|
||||||
|
JOIN sku b ON b.name_id = a.id AND b.deleted_at = ?
|
||||||
|
JOIN store e ON e.deleted_at = ?
|
||||||
|
`
|
||||||
|
sqlParams = append(sqlParams,
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
)
|
||||||
|
if !isFocus {
|
||||||
|
sql += `
|
||||||
|
LEFT
|
||||||
|
`
|
||||||
|
}
|
||||||
|
sql += `
|
||||||
|
JOIN store_sku_bind c ON c.sku_id = b.id AND c.deleted_at = ? AND c.store_id = e.id
|
||||||
|
`
|
||||||
|
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
||||||
|
if status != -1 {
|
||||||
|
sql += " AND c.status = ?"
|
||||||
|
sqlParams = append(sqlParams, status)
|
||||||
|
}
|
||||||
|
sql += `
|
||||||
|
LEFT JOIN sku_name_place_bind f ON a.id = f.name_id AND e.city_code = f.place_code
|
||||||
|
`
|
||||||
|
if isAct {
|
||||||
|
sql += `
|
||||||
|
JOIN (
|
||||||
|
SELECT t2.store_id, t2.sku_id,
|
||||||
|
MIN(IF(t3.actual_act_price <= 0, NULL, t3.actual_act_price)) actual_act_price, /*non-zero min value*/
|
||||||
|
MIN(IF(t2.earning_price <= 0, NULL, t2.earning_price)) earning_price /*non-zero min value*/
|
||||||
|
FROM act t1
|
||||||
|
JOIN act_store_sku t2 ON t2.act_id = t1.id AND t2.deleted_at = ?
|
||||||
|
JOIN act_store_sku_map t3 ON t3.bind_id = t2.id AND t3.act_id = t1.id AND (t3.sync_status & ? = 0 OR t1.type = ?)
|
||||||
|
JOIN act_map t4 ON t4.act_id = t1.id AND t4.vendor_id = t3.vendor_id AND t4.deleted_at = ? AND (t4.sync_status & ? = 0 OR t1.type = ?)
|
||||||
|
WHERE t1.deleted_at = ? AND t1.status = ? AND NOT (t1.begin_at > ? OR t1.end_at < ?)
|
||||||
|
AND t2.store_id = ?
|
||||||
|
GROUP BY 1,2
|
||||||
|
) ta ON ta.store_id = e.id AND ta.sku_id = b.id
|
||||||
|
`
|
||||||
|
sqlParams = append(sqlParams,
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
model.SyncFlagNewMask,
|
||||||
|
model.ActSkuFake,
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
model.SyncFlagNewMask,
|
||||||
|
model.ActSkuFake,
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
model.ActStatusCreated,
|
||||||
|
time.Now(),
|
||||||
|
time.Now(),
|
||||||
|
storeID,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
sql += `
|
||||||
|
WHERE a.deleted_at = ?
|
||||||
|
AND (a.is_global = 1 OR f.id IS NOT NULL OR 1 = ?)
|
||||||
|
AND e.id = ?
|
||||||
|
`
|
||||||
|
sqlParams = append(sqlParams, utils.DefaultTimeValue, utils.Bool2Int(isFocus), storeID)
|
||||||
|
if categoryID != 0 {
|
||||||
|
cat := &model.SkuCategory{}
|
||||||
|
cat.ID = categoryID
|
||||||
|
if err = dao.GetEntity(db, cat); err == nil {
|
||||||
|
sql += " AND (a.category_id = ?"
|
||||||
|
sqlParams = append(sqlParams, cat.ID)
|
||||||
|
if cat.Level == 1 {
|
||||||
|
sql += " OR a.category_id IN (SELECT id FROM sku_category WHERE parent_id = ?)"
|
||||||
|
sqlParams = append(sqlParams, cat.ID)
|
||||||
|
}
|
||||||
|
sql += ")"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if isFocus {
|
||||||
|
sql += " AND ((a.status = ? AND b.status = ?) OR c.status = ?)"
|
||||||
|
sqlParams = append(sqlParams, model.SkuStatusNormal, model.SkuStatusNormal, model.SkuStatusNormal)
|
||||||
|
} else {
|
||||||
|
sql += " AND c.sku_id IS NULL AND (a.status = ? AND b.status = ?)"
|
||||||
|
sqlParams = append(sqlParams, model.SkuStatusNormal, model.SkuStatusNormal)
|
||||||
|
}
|
||||||
|
if keyword != "" {
|
||||||
|
sql += " AND a.name LIKE ?"
|
||||||
|
sqlParams = append(sqlParams, "%"+keyword+"%")
|
||||||
|
}
|
||||||
|
sql += `
|
||||||
|
LIMIT ? OFFSET ?
|
||||||
|
`
|
||||||
|
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||||
|
offset = jxutils.FormalizePageOffset(offset)
|
||||||
|
sqlParams = append(sqlParams, pageSize, offset)
|
||||||
|
fmt.Println(sql)
|
||||||
|
fmt.Println(sqlParams)
|
||||||
|
dao.Begin(db)
|
||||||
|
defer dao.Commit(db)
|
||||||
|
if err = dao.GetRows(db, &SkuNames, sql, sqlParams...); err == nil {
|
||||||
|
skuNamesInfo = &dao.StoreSkuNamesInfo{
|
||||||
|
TotalCount: dao.GetLastTotalRowCount(db),
|
||||||
|
}
|
||||||
|
// skuNamesInfo.TotalCount = dao.GetLastTotalRowCount(db)
|
||||||
|
for _, v := range SkuNames {
|
||||||
|
var skus []*dao.StoreSkuExt
|
||||||
|
sql2 := `
|
||||||
|
SELECT a.id sku_id, a.spec_quality sku_spec_quality, a.spec_unit sku_spec_unit, a.status sku_status,
|
||||||
|
b.stock, b.price bind_price, b.unit_price,
|
||||||
|
b.status store_sku_status
|
||||||
|
FROM sku a
|
||||||
|
JOIN store_sku_bind b ON a.id = b.sku_id AND b.deleted_at = ? AND b.store_id = ?
|
||||||
|
JOIN sku_name c ON a.name_id = c.id AND c.deleted_at = ? AND c.status = ?
|
||||||
|
WHERE a.deleted_at = ? AND a.name_id = ? AND a.status = ?
|
||||||
|
`
|
||||||
|
sqlParams2 := []interface{}{utils.DefaultTimeValue, storeID,
|
||||||
|
utils.DefaultTimeValue, model.SkuStatusNormal,
|
||||||
|
utils.DefaultTimeValue, v.ID, model.SkuStatusNormal,
|
||||||
|
}
|
||||||
|
if status != -1 {
|
||||||
|
sql2 += " AND b.status = ?"
|
||||||
|
sqlParams2 = append(sqlParams2, status)
|
||||||
|
}
|
||||||
|
if err = dao.GetRows(db, &skus, sql2, sqlParams2); err == nil {
|
||||||
|
v.Skus = skus
|
||||||
|
}
|
||||||
|
}
|
||||||
|
skuNamesInfo.SkuNames = SkuNames
|
||||||
|
if err == nil {
|
||||||
|
if isFocus {
|
||||||
|
if err == nil {
|
||||||
|
storeIDs, skuIDs := GetStoreAndSkuIDsFromInfo(skuNamesInfo)
|
||||||
|
err = dao.UpdateActPrice4StoreSkuNameNew(db, storeIDs, skuIDs, skuNamesInfo, -1)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err = updateUnitPrice4StoreSkuNameNew(db, skuNamesInfo)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return skuNamesInfo, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku, isAct, isHighPrice bool, priceType int, actVendorID int, params map[string]interface{}) (sql string, sqlParams []interface{}, err error) {
|
func GetStoreSkus(ctx *jxcontext.Context, storeID int, skuIDs []int, isFocus bool, keyword string, isBySku, isAct bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *dao.StoreSkuNamesInfo, err error) {
|
||||||
|
return GetStoresSkus(ctx, []int{storeID}, skuIDs, nil, isFocus, false, 0, keyword, isBySku, isAct, params, offset, pageSize)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, upcs []string, isFocus bool, keyword string, isBySku, isAct, isHighPrice bool, priceType int, actVendorID int, params map[string]interface{}) (sql string, sqlParams []interface{}, err error) {
|
||||||
sql = `
|
sql = `
|
||||||
FROM sku_name t1
|
FROM sku_name t1
|
||||||
JOIN sku t2 FORCE INDEX(PRIMARY) ON t1.id = t2.name_id AND t2.deleted_at = ?/* AND t2.status = ?*/
|
JOIN sku t2 FORCE INDEX(PRIMARY) ON t1.id = t2.name_id AND t2.deleted_at = ?/* AND t2.status = ?*/
|
||||||
@@ -422,6 +575,10 @@ func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool
|
|||||||
sql += " AND IF(INSTR(t3.name,'" + model.ExdStoreName + "') > 0, t2.exd_sku_id <> '', t2.exd_sku_id = '')"
|
sql += " AND IF(INSTR(t3.name,'" + model.ExdStoreName + "') > 0, t2.exd_sku_id <> '', t2.exd_sku_id = '')"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(upcs) > 0 {
|
||||||
|
sql += " AND t1.upc IN (" + dao.GenQuestionMarks(len(upcs)) + ")"
|
||||||
|
sqlParams = append(sqlParams, upcs)
|
||||||
|
}
|
||||||
if len(skuIDs) > 0 {
|
if len(skuIDs) > 0 {
|
||||||
sql += " AND t2.id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")"
|
sql += " AND t2.id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")"
|
||||||
sqlParams = append(sqlParams, skuIDs)
|
sqlParams = append(sqlParams, skuIDs)
|
||||||
@@ -486,7 +643,7 @@ func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool
|
|||||||
return sql, sqlParams, err
|
return sql, sqlParams, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetStoresSkus(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus, isHighPrice bool, priceType int, keyword string, isBySku, isAct bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *dao.StoreSkuNamesInfo, err error) {
|
func GetStoresSkus(ctx *jxcontext.Context, storeIDs, skuIDs []int, upcs []string, isFocus, isHighPrice bool, priceType int, keyword string, isBySku, isAct bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *dao.StoreSkuNamesInfo, err error) {
|
||||||
//权限
|
//权限
|
||||||
if permission.IsRoled(ctx) {
|
if permission.IsRoled(ctx) {
|
||||||
if storeIDsMap, err := permission.GetUserStoresResultMap(ctx.GetUserID()); err == nil {
|
if storeIDsMap, err := permission.GetUserStoresResultMap(ctx.GetUserID()); err == nil {
|
||||||
@@ -497,6 +654,9 @@ func GetStoresSkus(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus, isHi
|
|||||||
storeIDs2 = append(storeIDs2, v)
|
storeIDs2 = append(storeIDs2, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(storeIDs2) == 0 {
|
||||||
|
storeIDs2 = append(storeIDs2, -1)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
for k, _ := range storeIDsMap {
|
for k, _ := range storeIDsMap {
|
||||||
storeIDs2 = append(storeIDs2, k)
|
storeIDs2 = append(storeIDs2, k)
|
||||||
@@ -506,10 +666,10 @@ func GetStoresSkus(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus, isHi
|
|||||||
storeIDs = storeIDs2
|
storeIDs = storeIDs2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return GetStoresSkusNew(ctx, storeIDs, skuIDs, isFocus, isHighPrice, priceType, keyword, isBySku, isAct, params, offset, pageSize)
|
return GetStoresSkusNew(ctx, storeIDs, skuIDs, upcs, isFocus, isHighPrice, priceType, keyword, isBySku, isAct, params, offset, pageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus, isHighPrice bool, priceType int, keyword string, isBySku, isAct bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *dao.StoreSkuNamesInfo, err error) {
|
func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, upcs []string, isFocus, isHighPrice bool, priceType int, keyword string, isBySku, isAct bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *dao.StoreSkuNamesInfo, err error) {
|
||||||
if !isFocus && !isBySku && (len(storeIDs) > 1 || len(storeIDs) == 0) {
|
if !isFocus && !isBySku && (len(storeIDs) > 1 || len(storeIDs) == 0) {
|
||||||
return nil, fmt.Errorf("未关注按SkuName只能查询单店")
|
return nil, fmt.Errorf("未关注按SkuName只能查询单店")
|
||||||
}
|
}
|
||||||
@@ -542,7 +702,7 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus, i
|
|||||||
delete(params, "minimumPrice")
|
delete(params, "minimumPrice")
|
||||||
}
|
}
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
sql, sqlParams, err := getGetStoresSkusBaseSQL(db, storeIDs, skuIDs, isFocus, keyword, isBySku, isAct, isHighPrice, priceType, actVendorID, params)
|
sql, sqlParams, err := getGetStoresSkusBaseSQL(db, storeIDs, skuIDs, upcs, isFocus, keyword, isBySku, isAct, isHighPrice, priceType, actVendorID, params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -583,6 +743,8 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus, i
|
|||||||
sqlParams2 = append(sqlParams2, sqlParamsPage)
|
sqlParams2 = append(sqlParams2, sqlParamsPage)
|
||||||
var storeNameList []*tStoreNameBind
|
var storeNameList []*tStoreNameBind
|
||||||
beginTime := time.Now()
|
beginTime := time.Now()
|
||||||
|
fmt.Println(sql2)
|
||||||
|
fmt.Println(sqlParams2)
|
||||||
if err = dao.GetRows(db, &storeNameList, sql2, sqlParams2...); err != nil {
|
if err = dao.GetRows(db, &storeNameList, sql2, sqlParams2...); err != nil {
|
||||||
dao.Rollback(db)
|
dao.Rollback(db)
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -1058,11 +1220,19 @@ func uniqueStoreIDs(storeIDs []int) []int {
|
|||||||
|
|
||||||
func uniqueStoreNameBind(skuBindInfos []*StoreSkuBindInfo) (outSkuBindInfos []*StoreSkuBindInfo) {
|
func uniqueStoreNameBind(skuBindInfos []*StoreSkuBindInfo) (outSkuBindInfos []*StoreSkuBindInfo) {
|
||||||
nameIDMap := make(map[int]int)
|
nameIDMap := make(map[int]int)
|
||||||
|
upcMap := make(map[string]int)
|
||||||
for _, v := range skuBindInfos {
|
for _, v := range skuBindInfos {
|
||||||
|
if v.NameID != 0 {
|
||||||
if nameIDMap[v.NameID] != 1 {
|
if nameIDMap[v.NameID] != 1 {
|
||||||
outSkuBindInfos = append(outSkuBindInfos, v)
|
outSkuBindInfos = append(outSkuBindInfos, v)
|
||||||
nameIDMap[v.NameID] = 1
|
nameIDMap[v.NameID] = 1
|
||||||
}
|
}
|
||||||
|
} else if v.UPC != "" {
|
||||||
|
if upcMap[v.UPC] != 1 {
|
||||||
|
outSkuBindInfos = append(outSkuBindInfos, v)
|
||||||
|
upcMap[v.UPC] = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return outSkuBindInfos
|
return outSkuBindInfos
|
||||||
}
|
}
|
||||||
@@ -1083,7 +1253,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
// if err = checkStoresSkusSaleCity(ctx, db, storeIDs, skuBindInfos); err != nil {
|
// if err = checkStoresSkusSaleCity(ctx, db, storeIDs, skuBindInfos); err != nil {
|
||||||
// return nil, err
|
// return nil, err
|
||||||
// }
|
// }
|
||||||
// globals.SugarLogger.Debugf("updateStoresSkusWithoutSync2, storeIDs:%v, skuBindInfos:%s", storeIDs, utils.Format4Output(skuBindInfos, false))
|
globals.SugarLogger.Debugf("updateStoresSkusWithoutSync2, storeIDs:%v, skuBindInfos:%s", storeIDs, utils.Format4Output(skuBindInfos, false))
|
||||||
isUserCanDirectChangePrice := true
|
isUserCanDirectChangePrice := true
|
||||||
if user := ctx.GetFullUser(); user != nil {
|
if user := ctx.GetFullUser(); user != nil {
|
||||||
isUserCanDirectChangePrice = user.Type&model.UserTypeOperator != 0
|
isUserCanDirectChangePrice = user.Type&model.UserTypeOperator != 0
|
||||||
@@ -1146,16 +1316,32 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
LEFT JOIN (
|
LEFT JOIN (
|
||||||
SELECT t7.store_id, t8.name_id, CAST(AVG(t7.unit_price) AS SIGNED) unit_price
|
SELECT t7.store_id, t8.name_id, CAST(AVG(t7.unit_price) AS SIGNED) unit_price
|
||||||
FROM store_sku_bind t7
|
FROM store_sku_bind t7
|
||||||
JOIN sku t8 ON t8.id = t7.sku_id AND t8.name_id = ?
|
JOIN sku t8 ON t8.id = t7.sku_id
|
||||||
|
`
|
||||||
|
if skuBindInfo.NameID != 0 {
|
||||||
|
sql += " AND t8.name_id = ?"
|
||||||
|
sqlParams = append(sqlParams, skuBindInfo.NameID)
|
||||||
|
} else if skuBindInfo.UPC != "" {
|
||||||
|
sql += " JOIN sku_name t9 ON t9.id = t8.name_id AND t9.upc = ?"
|
||||||
|
sqlParams = append(sqlParams, skuBindInfo.UPC)
|
||||||
|
}
|
||||||
|
sql += `
|
||||||
WHERE t7.deleted_at = ? AND t7.store_id = ?
|
WHERE t7.deleted_at = ? AND t7.store_id = ?
|
||||||
GROUP BY 1,2
|
GROUP BY 1,2
|
||||||
) t5 ON t5.store_id = ts.id AND t5.name_id = t1.name_id`
|
) t5 ON t5.store_id = ts.id AND t5.name_id = t1.name_id`
|
||||||
sqlParams = append(sqlParams, skuBindInfo.NameID, utils.DefaultTimeValue, storeID)
|
sqlParams = append(sqlParams, utils.DefaultTimeValue, storeID)
|
||||||
}
|
}
|
||||||
sql += `
|
sql += " WHERE 1 = 1"
|
||||||
WHERE t1.name_id = ? AND t1.deleted_at = ?
|
if skuBindInfo.NameID != 0 {
|
||||||
|
sql += " AND t1.name_id = ?"
|
||||||
|
sqlParams = append(sqlParams, skuBindInfo.NameID)
|
||||||
|
} else if skuBindInfo.UPC != "" {
|
||||||
|
sql += " AND t3.upc = ?"
|
||||||
|
sqlParams = append(sqlParams, skuBindInfo.UPC)
|
||||||
|
}
|
||||||
|
sql += ` AND t1.deleted_at = ?
|
||||||
FOR UPDATE`
|
FOR UPDATE`
|
||||||
sqlParams = append(sqlParams, skuBindInfo.NameID, utils.DefaultTimeValue)
|
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
||||||
// globals.SugarLogger.Debug(sql)
|
// globals.SugarLogger.Debug(sql)
|
||||||
if err = dao.GetRows(db, &allBinds, sql, sqlParams...); err == nil {
|
if err = dao.GetRows(db, &allBinds, sql, sqlParams...); err == nil {
|
||||||
if len(allBinds) > 0 {
|
if len(allBinds) > 0 {
|
||||||
@@ -1187,7 +1373,6 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
var num int64
|
var num int64
|
||||||
inSkuBind := inSkuBinsMap[v.RealSkuID]
|
inSkuBind := inSkuBinsMap[v.RealSkuID]
|
||||||
isCanChangePrice := (isUserCanDirectChangePrice || jxutils.TranslateStorePriceType(v.ChangePriceType) != model.StoreChangePriceTypeBossDisabled)
|
isCanChangePrice := (isUserCanDirectChangePrice || jxutils.TranslateStorePriceType(v.ChangePriceType) != model.StoreChangePriceTypeBossDisabled)
|
||||||
// globals.SugarLogger.Debug(utils.Format4Output(inSkuBind, false))
|
|
||||||
var skuBind *model.StoreSkuBind
|
var skuBind *model.StoreSkuBind
|
||||||
if v.ID == 0 {
|
if v.ID == 0 {
|
||||||
// if v.ExdSkuID == "" {
|
// if v.ExdSkuID == "" {
|
||||||
@@ -1227,7 +1412,6 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
}
|
}
|
||||||
setStoreSkuBindStatus(skuBind, model.SyncFlagNewMask)
|
setStoreSkuBindStatus(skuBind, model.SyncFlagNewMask)
|
||||||
dao.WrapAddIDCULDEntity(skuBind, userName)
|
dao.WrapAddIDCULDEntity(skuBind, userName)
|
||||||
// globals.SugarLogger.Debug(utils.Format4Output(skuBind, false))
|
|
||||||
if deletedSku := dao.GetDeletedStoreSkuBind(db, skuBind.StoreID, skuBind.SkuID); deletedSku == nil {
|
if deletedSku := dao.GetDeletedStoreSkuBind(db, skuBind.StoreID, skuBind.SkuID); deletedSku == nil {
|
||||||
if err = dao.CreateEntity(db, skuBind); err != nil {
|
if err = dao.CreateEntity(db, skuBind); err != nil {
|
||||||
dao.Rollback(db)
|
dao.Rollback(db)
|
||||||
@@ -1260,10 +1444,10 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
if len(thingMaps) > 0 {
|
if len(thingMaps) > 0 {
|
||||||
//如果平台ID为空(未创建到京东)
|
//如果平台ID为空(未创建到京东)
|
||||||
if thingMaps[0].VendorThingID == "" {
|
if thingMaps[0].VendorThingID == "" {
|
||||||
//并且同步标志还没有带待创建(因为addskuname现在建到thingmap上不会带待创建标志了)
|
|
||||||
if !model.IsSyncStatusNew(thingMaps[0].SyncStatus) {
|
|
||||||
isSyncSkus = true
|
isSyncSkus = true
|
||||||
appCodeList = append(appCodeList, list1[0].VendorOrgCode)
|
appCodeList = append(appCodeList, list1[0].VendorOrgCode)
|
||||||
|
//并且同步标志还没有带待创建(因为addskuname现在建到thingmap上不会带待创建标志了)
|
||||||
|
if !model.IsSyncStatusNew(thingMaps[0].SyncStatus) {
|
||||||
OnCreateThing(ctx, db, vendorOrgCodes, int64(v.RealSkuID), model.ThingTypeSku, model.SyncFlagNewMask, false)
|
OnCreateThing(ctx, db, vendorOrgCodes, int64(v.RealSkuID), model.ThingTypeSku, model.SyncFlagNewMask, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1334,6 +1518,33 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
setStoreSkuBindStatus(skuBind, model.SyncFlagStockMask)
|
setStoreSkuBindStatus(skuBind, model.SyncFlagStockMask)
|
||||||
if tmpStatus == model.StoreSkuBindStatusNormal {
|
if tmpStatus == model.StoreSkuBindStatusNormal {
|
||||||
skuBind.Stock = model.MaxStoreSkuStockQty
|
skuBind.Stock = model.MaxStoreSkuStockQty
|
||||||
|
//下面这段很难受
|
||||||
|
{
|
||||||
|
//如果是京东关注,要去建商品
|
||||||
|
list1, _ := dao.GetStoresMapList(db, []int{model.VendorIDJD}, []int{storeID}, nil, model.StoreStatusAll, 1, "", "", "")
|
||||||
|
//表示这个门店绑定了京东
|
||||||
|
if len(list1) > 0 {
|
||||||
|
vendorOrgCodes, _ := dao.GetVendorOrgCode(db, model.VendorIDJD, list1[0].VendorOrgCode, model.VendorOrgTypePlatform)
|
||||||
|
//thingmap里肯定存在,再判断有没有同步上去
|
||||||
|
thingMaps, _ := dao.GetThingMapList(db, model.ThingTypeSku, []int{model.VendorIDJD}, []int{v.RealSkuID}, []string{list1[0].VendorOrgCode})
|
||||||
|
if len(thingMaps) > 0 {
|
||||||
|
//如果平台ID为空(未创建到京东)
|
||||||
|
if thingMaps[0].VendorThingID == "" {
|
||||||
|
isSyncSkus = true
|
||||||
|
appCodeList = append(appCodeList, list1[0].VendorOrgCode)
|
||||||
|
//并且同步标志还没有带待创建(因为addskuname现在建到thingmap上不会带待创建标志了)
|
||||||
|
if !model.IsSyncStatusNew(thingMaps[0].SyncStatus) {
|
||||||
|
OnCreateThing(ctx, db, vendorOrgCodes, int64(v.RealSkuID), model.ThingTypeSku, model.SyncFlagNewMask, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//万一不存在
|
||||||
|
isSyncSkus = true
|
||||||
|
appCodeList = append(appCodeList, list1[0].VendorOrgCode)
|
||||||
|
OnCreateThing(ctx, db, vendorOrgCodes, int64(v.RealSkuID), model.ThingTypeSku, model.SyncFlagNewMask, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
skuBind.Stock = 0
|
skuBind.Stock = 0
|
||||||
}
|
}
|
||||||
@@ -4421,7 +4632,9 @@ func CreateSkusAndFocusFromWx(ctx *jxcontext.Context, productInfo *jdapi.Product
|
|||||||
var (
|
var (
|
||||||
db = dao.GetDB()
|
db = dao.GetDB()
|
||||||
skuBindInfos []*StoreSkuBindInfo
|
skuBindInfos []*StoreSkuBindInfo
|
||||||
|
outSkuNameExt *model.SkuNameExt
|
||||||
)
|
)
|
||||||
|
|
||||||
if productInfo == nil {
|
if productInfo == nil {
|
||||||
return fmt.Errorf("未查询到相关商品!")
|
return fmt.Errorf("未查询到相关商品!")
|
||||||
}
|
}
|
||||||
@@ -4461,22 +4674,19 @@ func CreateSkusAndFocusFromWx(ctx *jxcontext.Context, productInfo *jdapi.Product
|
|||||||
productInfo.Unit = unit
|
productInfo.Unit = unit
|
||||||
productInfo.SpecUnit = specUnit
|
productInfo.SpecUnit = specUnit
|
||||||
}
|
}
|
||||||
skuNames2, err := dao.GetSkuNames(db, nil, nil, productInfo.Name, false)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if productInfo.Name == "" {
|
if productInfo.Name == "" {
|
||||||
return fmt.Errorf("暂时无法创建此商品,[%v]", productInfo.Name)
|
if result, err := api.MtwmAPI.GetStandardProductListWithCond(productInfo.UpcCode); err == nil && result != nil {
|
||||||
|
productInfo.OriginalName = result.Name
|
||||||
|
productInfo.OriginalSpec = result.Spec
|
||||||
|
productInfo.Name = result.Name
|
||||||
|
productInfo.SpecUnit = result.SpecUnit
|
||||||
|
productInfo.Unit = result.Unit
|
||||||
|
productInfo.SpecQuality = float32(result.SpecNew)
|
||||||
|
productInfo.ImgList = strings.Split(result.Pic, ",")
|
||||||
|
productInfo.Weight = float32(result.Weight)
|
||||||
|
productInfo.BrandName = result.BrandNamePath
|
||||||
}
|
}
|
||||||
if len(skuNames2) > 1 {
|
|
||||||
return fmt.Errorf("此商品名在京西库中查询出了大于1个商品,[%v]", productInfo.Name)
|
|
||||||
}
|
}
|
||||||
//表示查到了,需要把upc更新上去,没查到就要新建
|
|
||||||
if len(skuNames2) == 1 && (productInfo.SpecQuality == skuNames2[0].SpecQuality && productInfo.SpecUnit == skuNames2[0].SpecUnit) {
|
|
||||||
skuNames2[0].Upc = &productInfo.UpcCode
|
|
||||||
dao.UpdateEntity(db, skuNames2[0], "Upc")
|
|
||||||
focusSku(skuNames2[0].ID)
|
|
||||||
} else {
|
|
||||||
skuNameExt := &model.SkuNameExt{
|
skuNameExt := &model.SkuNameExt{
|
||||||
SkuName: model.SkuName{
|
SkuName: model.SkuName{
|
||||||
Name: productInfo.Name,
|
Name: productInfo.Name,
|
||||||
@@ -4499,9 +4709,17 @@ func CreateSkusAndFocusFromWx(ctx *jxcontext.Context, productInfo *jdapi.Product
|
|||||||
skuNameExt.Skus[0].Weight = int(utils.Str2Int64(utils.Float64ToStr(float64(productInfo.Weight))))
|
skuNameExt.Skus[0].Weight = int(utils.Str2Int64(utils.Float64ToStr(float64(productInfo.Weight))))
|
||||||
skuNameExt.Skus[0].Status = model.SkuStatusNormal
|
skuNameExt.Skus[0].Status = model.SkuStatusNormal
|
||||||
if len(productInfo.ImgList) > 0 {
|
if len(productInfo.ImgList) > 0 {
|
||||||
skuNameExt.Img = productInfo.ImgList[0]
|
setImgs(skuNameExt, productInfo.ImgList)
|
||||||
}
|
}
|
||||||
outSkuNameExt, err := AddSkuName(ctx, skuNameExt, ctx.GetUserName())
|
//可能就是没查出来
|
||||||
|
if skuNameExt.Name == "" {
|
||||||
|
skuNameExt.Name = productInfo.OriginalName
|
||||||
|
skuNameExt.Unit = model.UnitNames[5]
|
||||||
|
skuNameExt.Skus[0].SpecQuality = 100
|
||||||
|
skuNameExt.Skus[0].SpecUnit = model.SpecUnitNames[0]
|
||||||
|
skuNameExt.Skus[0].Weight = 100
|
||||||
|
}
|
||||||
|
outSkuNameExt, err = AddSkuName(ctx, skuNameExt, ctx.GetUserName())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if _, ok := err.(*SyncError); ok {
|
if _, ok := err.(*SyncError); ok {
|
||||||
err = nil
|
err = nil
|
||||||
@@ -4511,7 +4729,6 @@ func CreateSkusAndFocusFromWx(ctx *jxcontext.Context, productInfo *jdapi.Product
|
|||||||
} else {
|
} else {
|
||||||
focusSku(outSkuNameExt.ID)
|
focusSku(outSkuNameExt.ID)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
focusSku(skuNames[0].ID)
|
focusSku(skuNames[0].ID)
|
||||||
}
|
}
|
||||||
@@ -4784,6 +5001,9 @@ func GetStoreSkuAudit(ctx *jxcontext.Context, storeIDs, nameIDs, skuIDs, statuss
|
|||||||
storeIDs2 = append(storeIDs2, v)
|
storeIDs2 = append(storeIDs2, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(storeIDs2) == 0 {
|
||||||
|
storeIDs2 = append(storeIDs2, -1)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
for k, _ := range storeIDsMap {
|
for k, _ := range storeIDsMap {
|
||||||
storeIDs2 = append(storeIDs2, k)
|
storeIDs2 = append(storeIDs2, k)
|
||||||
@@ -5241,3 +5461,69 @@ func DeleteActStoreSkuBind(ctx *jxcontext.Context, db *dao.DaoDB, actID int, act
|
|||||||
dao.Commit(db)
|
dao.Commit(db)
|
||||||
return originSyncStatus, err
|
return originSyncStatus, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetVendorStoreSkus(ctx *jxcontext.Context, storeID, vendorID int) (err error) {
|
||||||
|
type SpecialtyStoreSkus struct {
|
||||||
|
Upc string `json:"商品upc码"`
|
||||||
|
SkuName string `json:"商品名"`
|
||||||
|
Unit string `json:"单位"`
|
||||||
|
Weight int `json:"重量(g)"`
|
||||||
|
Price int64 `json:"售价"`
|
||||||
|
}
|
||||||
|
var (
|
||||||
|
db = dao.GetDB()
|
||||||
|
specialtyStoreSkus []*SpecialtyStoreSkus
|
||||||
|
excelTitle = []string{
|
||||||
|
"商品upc码",
|
||||||
|
"商品名",
|
||||||
|
"单位",
|
||||||
|
"重量(g)",
|
||||||
|
"售价",
|
||||||
|
}
|
||||||
|
sheetList []*excel.Obj2ExcelSheetConfig
|
||||||
|
downloadURL, fileName string
|
||||||
|
)
|
||||||
|
storeDetail, err := dao.GetStoreDetail(db, storeID, vendorID, "")
|
||||||
|
if err != nil || storeDetail == nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if partner.IsMultiStore(vendorID) {
|
||||||
|
// handler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformStoreSkuHandler)
|
||||||
|
// skuBareInfoList, _ := handler.GetStoreSkusBareInfo(ctx, storeDetail.VendorOrgCode, nil, storeID, storeDetail.VendorStoreID, nil)
|
||||||
|
return fmt.Errorf("暂不支持京东!")
|
||||||
|
} else {
|
||||||
|
handler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler)
|
||||||
|
skuList, _ := handler.GetStoreSkusFullInfo(ctx, nil, storeID, storeDetail.VendorStoreID, nil)
|
||||||
|
for _, sku := range skuList {
|
||||||
|
if sku.UPC != "" {
|
||||||
|
skus := &SpecialtyStoreSkus{
|
||||||
|
Upc: sku.UPC,
|
||||||
|
SkuName: sku.Name,
|
||||||
|
Unit: sku.Unit,
|
||||||
|
Weight: sku.SkuList[0].Weight,
|
||||||
|
Price: sku.SkuList[0].VendorPrice,
|
||||||
|
}
|
||||||
|
specialtyStoreSkus = append(specialtyStoreSkus, skus)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
excelConf := &excel.Obj2ExcelSheetConfig{
|
||||||
|
Title: "sheet1",
|
||||||
|
Data: specialtyStoreSkus,
|
||||||
|
CaptionList: excelTitle,
|
||||||
|
}
|
||||||
|
sheetList = append(sheetList, excelConf)
|
||||||
|
if excelConf != nil {
|
||||||
|
downloadURL, fileName, err = jxutils.UploadExeclAndPushMsg(sheetList, "平台门店标品")
|
||||||
|
} else {
|
||||||
|
baseapi.SugarLogger.Debug("WriteToExcel: dataSuccess is nil!")
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
baseapi.SugarLogger.Errorf("WriteToExcel:upload %s , %s failed error:%v", fileName, err)
|
||||||
|
} else {
|
||||||
|
noticeMsg := fmt.Sprintf("[详情点我]%s/billshow/?normal=true&path=%s \n", globals.BackstageHost, downloadURL)
|
||||||
|
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, ctx.GetUserID(), "异步任务完成", noticeMsg)
|
||||||
|
baseapi.SugarLogger.Debug("WriteToExcel: dataSuccess downloadURL: [%v]", downloadURL)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
package cms
|
package cms
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/dingdingapi"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxutils/ddmsg"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
@@ -22,7 +24,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *StoreManager) OnStoreStatusChanged(vendorStoreID string, vendorID int, storeStatus int) (err error) {
|
func (s *StoreManager) OnStoreStatusChanged(vendorStoreID string, vendorID int, storeStatus int) (err error) {
|
||||||
return err
|
// return err
|
||||||
globals.SugarLogger.Debugf("OnStoreStatusChanged venvendorStoreID:%s, storeStatus:%d", vendorStoreID, storeStatus)
|
globals.SugarLogger.Debugf("OnStoreStatusChanged venvendorStoreID:%s, storeStatus:%d", vendorStoreID, storeStatus)
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
storeDetail, err := dao.GetStoreDetailByVendorStoreID(db, vendorStoreID, vendorID, "")
|
storeDetail, err := dao.GetStoreDetailByVendorStoreID(db, vendorStoreID, vendorID, "")
|
||||||
@@ -33,6 +35,10 @@ func (s *StoreManager) OnStoreStatusChanged(vendorStoreID string, vendorID int,
|
|||||||
storeKV = map[string]interface{}{
|
storeKV = map[string]interface{}{
|
||||||
"Status": model.StoreStatusOpened,
|
"Status": model.StoreStatusOpened,
|
||||||
}
|
}
|
||||||
|
content := "您的门店 [" + storeDetail.Name + "],ID:[" + utils.Int2Str(storeDetail.ID) + "],在[" + model.VendorChineseNames[vendorID] + "] 平台上营业状态和京西不一致!平台状态:【营业】,京西状态:【非营业】"
|
||||||
|
if user, err := dao.GetUserByID(db, "mobile", storeDetail.MarketManPhone); err == nil {
|
||||||
|
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "平台门店状态变化", content)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if storeDetail.VendorStatus != model.StoreStatusOpened {
|
if storeDetail.VendorStatus != model.StoreStatusOpened {
|
||||||
storeMapKV = map[string]interface{}{
|
storeMapKV = map[string]interface{}{
|
||||||
@@ -46,6 +52,10 @@ func (s *StoreManager) OnStoreStatusChanged(vendorStoreID string, vendorID int,
|
|||||||
"Status": storeStatus,
|
"Status": storeStatus,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
content := "您的门店 [" + storeDetail.Name + "],ID:[" + utils.Int2Str(storeDetail.ID) + "],在[" + model.VendorChineseNames[vendorID] + "] 平台上营业状态和京西不一致!平台状态:【非营业】,京西状态:【营业】"
|
||||||
|
if user, err := dao.GetUserByID(db, "mobile", storeDetail.MarketManPhone); err == nil {
|
||||||
|
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "平台门店状态变化", content)
|
||||||
|
}
|
||||||
} else if storeDetail.Status <= storeStatus {
|
} else if storeDetail.Status <= storeStatus {
|
||||||
if storeDetail.VendorStatus != model.StoreStatusOpened {
|
if storeDetail.VendorStatus != model.StoreStatusOpened {
|
||||||
storeMapKV = map[string]interface{}{
|
storeMapKV = map[string]interface{}{
|
||||||
|
|||||||
@@ -532,6 +532,9 @@ func (v *VendorSync) SyncStoresSkus(ctx *jxcontext.Context, parentTask tasksch.I
|
|||||||
storeIDs2 = append(storeIDs2, v)
|
storeIDs2 = append(storeIDs2, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(storeIDs2) == 0 {
|
||||||
|
storeIDs2 = append(storeIDs2, -1)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
for k, _ := range storeIDsMap {
|
for k, _ := range storeIDsMap {
|
||||||
storeIDs2 = append(storeIDs2, k)
|
storeIDs2 = append(storeIDs2, k)
|
||||||
|
|||||||
@@ -604,7 +604,7 @@ func amendAndPruneVendorStuff(ctx *jxcontext.Context, parentTask tasksch.ITask,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
getSyncFlagCat := func(categoryID int) int8 {
|
getSyncFlagCat := func(categoryID int) int8 {
|
||||||
if vendorCatMap[categoryID] != nil {
|
if vendorCatMap[categoryID] != nil || vendorOrgCodes[0].IsJxCat == model.NO {
|
||||||
return model.SyncFlagNewMask
|
return model.SyncFlagNewMask
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
@@ -613,7 +613,6 @@ func amendAndPruneVendorStuff(ctx *jxcontext.Context, parentTask tasksch.ITask,
|
|||||||
if err = err2; err == nil {
|
if err = err2; err == nil {
|
||||||
remoteCatMap := make(map[string]int)
|
remoteCatMap := make(map[string]int)
|
||||||
cat2Delete = checkRemoteCatExist(remoteCatMap, localCatMap, remoteCatList)
|
cat2Delete = checkRemoteCatExist(remoteCatMap, localCatMap, remoteCatList)
|
||||||
|
|
||||||
for _, v := range localCatList {
|
for _, v := range localCatList {
|
||||||
if v.IsExdSpec == model.NO {
|
if v.IsExdSpec == model.NO {
|
||||||
if v.MapID != 0 {
|
if v.MapID != 0 {
|
||||||
|
|||||||
@@ -297,7 +297,7 @@ func formalizeStoreSkuList(inSkuList []*dao.StoreSkuSyncInfo) []*dao.StoreSkuSyn
|
|||||||
skuItem.VendorVendorCatID = utils.Str2Int64(skuItem.SkuVendorMapCatID)
|
skuItem.VendorVendorCatID = utils.Str2Int64(skuItem.SkuVendorMapCatID)
|
||||||
}
|
}
|
||||||
skuItem.MergedStatus = jxutils.MergeSkuStatus(jxutils.MergeSkuStatus(skuItem.NameStatus, skuItem.Status), skuItem.StoreSkuStatus)
|
skuItem.MergedStatus = jxutils.MergeSkuStatus(jxutils.MergeSkuStatus(skuItem.NameStatus, skuItem.Status), skuItem.StoreSkuStatus)
|
||||||
//美团的商品名字非标品中间不能有 ‘约’
|
//美团的商品名字都要有 ‘约’
|
||||||
if skuItem.VendorID == model.VendorIDMTWM {
|
if skuItem.VendorID == model.VendorIDMTWM {
|
||||||
skuItem.SkuName = jxutils.ComposeSkuNameSync2(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 0, skuItem.ExPrefix, skuItem.ExPrefixBegin, skuItem.ExPrefixEnd, (skuItem.BrandID == skuItem.ExBrandID && skuItem.ExBrandID != 0) || skuItem.ExBrandID == 0)
|
skuItem.SkuName = jxutils.ComposeSkuNameSync2(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 0, skuItem.ExPrefix, skuItem.ExPrefixBegin, skuItem.ExPrefixEnd, (skuItem.BrandID == skuItem.ExBrandID && skuItem.ExBrandID != 0) || skuItem.ExBrandID == 0)
|
||||||
} else {
|
} else {
|
||||||
@@ -373,7 +373,7 @@ func updateStoreSku(db *dao.DaoDB, vendorID int, storeSkuList []*dao.StoreSkuSyn
|
|||||||
// }
|
// }
|
||||||
// }()
|
// }()
|
||||||
if vendorID == model.VendorIDJDShop {
|
if vendorID == model.VendorIDJDShop {
|
||||||
if syncStatus != model.SyncFlagPriceMask && syncStatus != model.SyncFlagSaleMask {
|
if syncStatus != model.SyncFlagPriceMask && syncStatus != model.SyncFlagSaleMask && syncStatus != model.SyncFlagStockMask {
|
||||||
for _, v := range storeSkuList {
|
for _, v := range storeSkuList {
|
||||||
updateItemList := make([]*dao.KVUpdateItem, len(v.StoreSkuSyncInfoJds))
|
updateItemList := make([]*dao.KVUpdateItem, len(v.StoreSkuSyncInfoJds))
|
||||||
for k, vv := range v.StoreSkuSyncInfoJds {
|
for k, vv := range v.StoreSkuSyncInfoJds {
|
||||||
@@ -469,7 +469,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
|||||||
now := jxutils.OperationTime2HourMinuteFormat(time.Now())
|
now := jxutils.OperationTime2HourMinuteFormat(time.Now())
|
||||||
var failedList []*partner.StoreSkuInfoWithErr
|
var failedList []*partner.StoreSkuInfoWithErr
|
||||||
for _, sku := range skus {
|
for _, sku := range skus {
|
||||||
globals.SugarLogger.Debugf("syncStoreSkuNew sku sync:%v", sku.SkuSyncStatus)
|
globals.SugarLogger.Debugf("syncStoreSkuNew sku sync1:%v", sku.SkuSyncStatus)
|
||||||
if !useVendorPriceDirectly &&
|
if !useVendorPriceDirectly &&
|
||||||
!isSkuLockTimeValid(sku) {
|
!isSkuLockTimeValid(sku) {
|
||||||
sku.VendorPrice = 0
|
sku.VendorPrice = 0
|
||||||
@@ -536,7 +536,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
|||||||
isAdded2Update := false
|
isAdded2Update := false
|
||||||
// 修改商品信息时不改价(以免活动引起的失败),而用单独的改价来改
|
// 修改商品信息时不改价(以免活动引起的失败),而用单独的改价来改
|
||||||
if (model.IsSyncStatusUpdate(sku.SkuSyncStatus) || (model.IsSyncStatusSeq(sku.SkuSyncStatus) && reorderHandler == nil)) && singleStoreHandler != nil {
|
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 && vendorID != model.VendorIDJDShop {
|
if dao.IsVendorThingIDEmpty(sku.VendorCatID) && !strings.Contains(sku.StoreName, model.ExdStoreName) && vendorID != model.VendorIDYB {
|
||||||
// globals.SugarLogger.Warnf("syncStoreSkuNew 修改门店:%d商品:%d,但没有平台分类ID", storeID, sku.SkuID)
|
// globals.SugarLogger.Warnf("syncStoreSkuNew 修改门店:%d商品:%d,但没有平台分类ID", storeID, sku.SkuID)
|
||||||
} else {
|
} else {
|
||||||
isAdded2Update = true
|
isAdded2Update = true
|
||||||
@@ -573,9 +573,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
|||||||
if bareSku == nil {
|
if bareSku == nil {
|
||||||
bareSku = storeSkuSyncInfo2Bare(sku)
|
bareSku = storeSkuSyncInfo2Bare(sku)
|
||||||
}
|
}
|
||||||
globals.SugarLogger.Debugf("syncStoreSkuNew sku stock sync:%v", sku.SkuSyncStatus)
|
|
||||||
stockList = append(stockList, bareSku)
|
stockList = append(stockList, bareSku)
|
||||||
globals.SugarLogger.Debugf("syncStoreSkuNew stock len:%v", len(stockList))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
isNeedReorder = model.IsSyncStatusSeq(sku.SkuSyncStatus)
|
isNeedReorder = model.IsSyncStatusSeq(sku.SkuSyncStatus)
|
||||||
@@ -935,7 +933,13 @@ func amendAndPruneStoreStuff(ctx *jxcontext.Context, parentTask tasksch.ITask, v
|
|||||||
}
|
}
|
||||||
localSkuMap := make(map[string]*dao.StoreSkuSyncInfo)
|
localSkuMap := make(map[string]*dao.StoreSkuSyncInfo)
|
||||||
for _, v := range localSkuList {
|
for _, v := range localSkuList {
|
||||||
localSkuMap[v.VendorSkuID] = v
|
vendorSkuID := v.VendorSkuID
|
||||||
|
if vendorID == model.VendorIDJDShop {
|
||||||
|
if storeSkus, _ := dao.GetStoresSkusInfo(db, []int{model.JdShopMainStoreID2}, []int{v.SkuID}); len(storeSkus) > 0 {
|
||||||
|
vendorSkuID = utils.Int64ToStr(storeSkus[0].JdsID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
localSkuMap[vendorSkuID] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
remoteSkuList, err2 := handler.GetStoreSkusFullInfo(ctx, task, storeID, vendorStoreID, nil)
|
remoteSkuList, err2 := handler.GetStoreSkusFullInfo(ctx, task, storeID, vendorStoreID, nil)
|
||||||
|
|||||||
@@ -246,6 +246,14 @@ func TryAddStoreBossRole4StoreByMobile(ctx *jxcontext.Context, storeID int, mobi
|
|||||||
if v != "" {
|
if v != "" {
|
||||||
if userList, _, err := dao.GetUsers(dao.GetDB(), model.UserTypeStoreBoss, "", nil, nil, []string{v}, 0, -1); err == nil && len(userList) > 0 {
|
if userList, _, err := dao.GetUsers(dao.GetDB(), model.UserTypeStoreBoss, "", nil, nil, []string{v}, 0, -1); err == nil && len(userList) > 0 {
|
||||||
userIDs = append(userIDs, userList[0].GetID())
|
userIDs = append(userIDs, userList[0].GetID())
|
||||||
|
} else {
|
||||||
|
if manTokenInfo, err := auth2.GetTokenInfo(ctx.GetToken()); err == nil {
|
||||||
|
RegisterUserWithMobile(ctx, &model.User{
|
||||||
|
Name: v,
|
||||||
|
Mobile: &v,
|
||||||
|
UserID2: v,
|
||||||
|
}, "", nil, manTokenInfo)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -561,6 +569,14 @@ func AddUsers4Role(ctx *jxcontext.Context, r *authz.RoleInfo, userIDList []strin
|
|||||||
|
|
||||||
errList := errlist.New()
|
errList := errlist.New()
|
||||||
for _, v := range userIDList {
|
for _, v := range userIDList {
|
||||||
|
// if permission.IsRoledByUserID(v) {
|
||||||
|
// if storeIDsMap, err := permission.GetUserStoresResultMap(v); err == nil {
|
||||||
|
// if storeIDsMap[r.StoreID] == 0 {
|
||||||
|
// return fmt.Errorf("此用户没有该门店[%v]的权限,无法添加到分组", r.StoreID)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
if err = checkUserType(v, model.UserTypeNonConsumer); err != nil {
|
if err = checkUserType(v, model.UserTypeNonConsumer); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -271,3 +271,19 @@ func UpdateVendorOrgCode(ctx *jxcontext.Context, ID int, payload map[string]inte
|
|||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AddVendorOrgCode(ctx *jxcontext.Context, vendorOrgCode *model.VendorOrgCode) (err error) {
|
||||||
|
var (
|
||||||
|
db = dao.GetDB()
|
||||||
|
)
|
||||||
|
list, err := dao.GetVendorOrgCode(db, vendorOrgCode.VendorID, vendorOrgCode.VendorOrgCode, model.VendorOrgTypePlatform)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if len(list) > 0 {
|
||||||
|
return fmt.Errorf("库里有这个账号了,[%v]", vendorOrgCode.VendorOrgCode)
|
||||||
|
}
|
||||||
|
dao.WrapAddIDCULDEntity(vendorOrgCode, ctx.GetUserName())
|
||||||
|
dao.CreateEntity(db, vendorOrgCode)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|||||||
@@ -184,6 +184,10 @@ func Init() {
|
|||||||
defsch.FixedScheduler.ConfirmSelfTakeOrders(jxcontext.AdminCtx, []int{model.VendorIDJD}, time.Now().Add(-48*time.Hour), time.Now().Add(-30*time.Minute), true, true)
|
defsch.FixedScheduler.ConfirmSelfTakeOrders(jxcontext.AdminCtx, []int{model.VendorIDJD}, time.Now().Add(-48*time.Hour), time.Now().Add(-30*time.Minute), true, true)
|
||||||
}, 5*time.Second, 10*time.Minute)
|
}, 5*time.Second, 10*time.Minute)
|
||||||
|
|
||||||
|
ScheduleTimerFuncByInterval(func() {
|
||||||
|
report.RefreshStoreManageState(jxcontext.AdminCtx)
|
||||||
|
}, 5*time.Second, 10*time.Minute)
|
||||||
|
|
||||||
ScheduleTimerFunc("auto enable remote store", func() {
|
ScheduleTimerFunc("auto enable remote store", func() {
|
||||||
cms.EnableHaveRestStores(jxcontext.AdminCtx, false, true)
|
cms.EnableHaveRestStores(jxcontext.AdminCtx, false, true)
|
||||||
// cms.OpenRemoteStoreByJxStatus(jxcontext.AdminCtx, nil, nil, false, false, true)
|
// cms.OpenRemoteStoreByJxStatus(jxcontext.AdminCtx, nil, nil, false, false, true)
|
||||||
@@ -348,9 +352,6 @@ func Init() {
|
|||||||
jdsCookie = configs[0].Value
|
jdsCookie = configs[0].Value
|
||||||
api.JdShopAPI.SetCookieWithStr(jdsCookie)
|
api.JdShopAPI.SetCookieWithStr(jdsCookie)
|
||||||
}
|
}
|
||||||
// if configs, err := dao.QueryConfigs(dao.GetDB(), "jdsCookie2", model.ConfigTypeCookie, ""); err == nil {
|
|
||||||
// api.JdShop2API.SetCookieWithStr(configs[0].Value)
|
|
||||||
// }
|
|
||||||
if configs, err := dao.QueryConfigs(dao.GetDB(), "yinbaoCookie", model.ConfigTypeCookie, ""); err == nil {
|
if configs, err := dao.QueryConfigs(dao.GetDB(), "yinbaoCookie", model.ConfigTypeCookie, ""); err == nil {
|
||||||
yinbaoCookie := configs[0].Value
|
yinbaoCookie := configs[0].Value
|
||||||
api.YinBaoAPI.SetCookie(".POSPALAUTH30220", yinbaoCookie)
|
api.YinBaoAPI.SetCookie(".POSPALAUTH30220", yinbaoCookie)
|
||||||
@@ -432,6 +433,8 @@ func doDailyWork2() {
|
|||||||
cms.SyncJdsStoreStock(jxcontext.AdminCtx, true, true)
|
cms.SyncJdsStoreStock(jxcontext.AdminCtx, true, true)
|
||||||
//刷新京东商城订单结算价
|
//刷新京东商城订单结算价
|
||||||
orderman.RefreshJdShopOrdersEarningPrice(jxcontext.AdminCtx, utils.Time2Str(time.Now().AddDate(0, 0, -2)), utils.Time2Str(time.Now()))
|
orderman.RefreshJdShopOrdersEarningPrice(jxcontext.AdminCtx, utils.Time2Str(time.Now().AddDate(0, 0, -2)), utils.Time2Str(time.Now()))
|
||||||
|
//刷新门店分组管理
|
||||||
|
cms.RefreshStoreBind(jxcontext.AdminCtx)
|
||||||
}
|
}
|
||||||
|
|
||||||
func doDailyWork() {
|
func doDailyWork() {
|
||||||
|
|||||||
@@ -825,6 +825,9 @@ func GetStoreTotalScoreList(ctx *jxcontext.Context, storeIDList []int, cityCode
|
|||||||
storeIDs2 = append(storeIDs2, v)
|
storeIDs2 = append(storeIDs2, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(storeIDs2) == 0 {
|
||||||
|
storeIDs2 = append(storeIDs2, -1)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
for k, _ := range storeIDsMap {
|
for k, _ := range storeIDsMap {
|
||||||
storeIDs2 = append(storeIDs2, k)
|
storeIDs2 = append(storeIDs2, k)
|
||||||
|
|||||||
@@ -16,17 +16,17 @@ import (
|
|||||||
|
|
||||||
func GetMenu(ctx *jxcontext.Context, userID string) (menus []*model.Menu, err error) {
|
func GetMenu(ctx *jxcontext.Context, userID string) (menus []*model.Menu, err error) {
|
||||||
if userID == "" {
|
if userID == "" {
|
||||||
return dao.GetMenu(dao.GetDB(), "", 0, userID)
|
return dao.GetMenu(dao.GetDB(), "", 0, 0, userID)
|
||||||
} else {
|
} else {
|
||||||
if user, err := dao.GetUserByID(dao.GetDB(), "user_id", userID); err == nil {
|
if user, err := dao.GetUserByID(dao.GetDB(), "user_id", userID); err == nil {
|
||||||
if user.Type&model.UserTypeRole != 0 {
|
if user.Type&model.UserTypeRole != 0 {
|
||||||
return dao.GetMenuWithUser(dao.GetDB(), "", 0, userID)
|
return dao.GetMenuWithUser(dao.GetDB(), "", 0, 0, userID)
|
||||||
} else {
|
} else {
|
||||||
return dao.GetMenu(dao.GetDB(), "", 0, "")
|
return dao.GetMenu(dao.GetDB(), "", 0, 0, "")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return dao.GetMenu(dao.GetDB(), "", 0, userID)
|
return dao.GetMenu(dao.GetDB(), "", 0, 0, userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func AddMenu(ctx *jxcontext.Context, menu *model.Menu) (err error) {
|
func AddMenu(ctx *jxcontext.Context, menu *model.Menu) (err error) {
|
||||||
@@ -39,7 +39,7 @@ func AddMenu(ctx *jxcontext.Context, menu *model.Menu) (err error) {
|
|||||||
if menu.Name == "" || menu.Level == 0 {
|
if menu.Name == "" || menu.Level == 0 {
|
||||||
return fmt.Errorf("添加失败!menu 名称和等级必须有值!")
|
return fmt.Errorf("添加失败!menu 名称和等级必须有值!")
|
||||||
}
|
}
|
||||||
menus, err := dao.GetMenu(db, menu.Name, menu.Level, "")
|
menus, err := dao.GetMenu(db, menu.Name, menu.Level, 0, "")
|
||||||
if len(menus) > 0 {
|
if len(menus) > 0 {
|
||||||
return fmt.Errorf("添加失败!已存在相同名称的 menu name : %v", menu.Name)
|
return fmt.Errorf("添加失败!已存在相同名称的 menu name : %v", menu.Name)
|
||||||
}
|
}
|
||||||
@@ -375,12 +375,10 @@ func GetUserStoresResultMap(userID string) (resultMap map[int]int, err error) {
|
|||||||
}
|
}
|
||||||
if stores, err := dao.GetStoreList(db, storeIDs, cityCodes, nil, brandIDs, nil, ""); len(stores) > 0 && err == nil {
|
if stores, err := dao.GetStoreList(db, storeIDs, cityCodes, nil, brandIDs, nil, ""); len(stores) > 0 && err == nil {
|
||||||
for _, v := range stores {
|
for _, v := range stores {
|
||||||
if _, ok := resultMap[v.ID]; !ok {
|
|
||||||
resultMap[v.ID] = v.ID
|
resultMap[v.ID] = v.ID
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// for k, _ := range brandIDMap {
|
// for k, _ := range brandIDMap {
|
||||||
// brandIDs = append(brandIDs, k)
|
// brandIDs = append(brandIDs, k)
|
||||||
// }
|
// }
|
||||||
@@ -413,3 +411,12 @@ func IsRoled(ctx *jxcontext.Context) bool {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func IsRoledByUserID(userID string) bool {
|
||||||
|
if user, err := dao.GetUserByID(dao.GetDB(), "user_id", userID); err == nil {
|
||||||
|
if user.Type&model.UserTypeRole != 0 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,8 +5,19 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"sort"
|
"sort"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxutils/ddmsg"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/dingdingapi"
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/jx-callback/business/partner"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxstore/permission"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
@@ -23,7 +34,7 @@ type tStoreSkuBindAndSkuName struct {
|
|||||||
UnitPriceList []int
|
UnitPriceList []int
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetStatisticsReportForOrders(ctx *jxcontext.Context, storeIDs []int, fromDate string, toDate string) (statisticsReportForOrdersList []*dao.StatisticsReportForOrdersList, err error) {
|
func GetStatisticsReportForOrders(ctx *jxcontext.Context, storeIDs, vendorIDs []int, fromDate string, toDate string) (statisticsReportForOrdersList []*dao.StatisticsReportForOrdersList, err error) {
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
fromDateParm := utils.Str2Time(fromDate)
|
fromDateParm := utils.Str2Time(fromDate)
|
||||||
toDateParm := utils.Str2Time(toDate)
|
toDateParm := utils.Str2Time(toDate)
|
||||||
@@ -31,7 +42,7 @@ func GetStatisticsReportForOrders(ctx *jxcontext.Context, storeIDs []int, fromDa
|
|||||||
if math.Ceil(toDateParm.Sub(fromDateParm).Hours()/24) > 92 {
|
if math.Ceil(toDateParm.Sub(fromDateParm).Hours()/24) > 92 {
|
||||||
return nil, errors.New(fmt.Sprintf("查询间隔时间不允许大于3个月!: 时间范围:[%v] 至 [%v]", fromDate, toDate))
|
return nil, errors.New(fmt.Sprintf("查询间隔时间不允许大于3个月!: 时间范围:[%v] 至 [%v]", fromDate, toDate))
|
||||||
}
|
}
|
||||||
statisticsReportForOrdersList, err = dao.GetStatisticsReportForOrders(db, storeIDs, fromDateParm, toDateParm)
|
statisticsReportForOrdersList, err = dao.GetStatisticsReportForOrders(db, storeIDs, vendorIDs, fromDateParm, toDateParm)
|
||||||
return statisticsReportForOrdersList, err
|
return statisticsReportForOrdersList, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -383,3 +394,228 @@ func GetManageState(ctx *jxcontext.Context, cityCodes []int, vendorID int) (getM
|
|||||||
}
|
}
|
||||||
return getManageStateResult, err
|
return getManageStateResult, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RefreshStoreManageState(ctx *jxcontext.Context) {
|
||||||
|
var (
|
||||||
|
db = dao.GetDB()
|
||||||
|
vendorIDs = []int{model.VendorIDJD, model.VendorIDMTWM, model.VendorIDEBAI}
|
||||||
|
messageFlag = time.Now().Hour() == 10 && time.Now().Minute() > 0 && time.Now().Minute() < 12
|
||||||
|
)
|
||||||
|
task := tasksch.NewParallelTask("RefreshStoreManageState", tasksch.NewParallelConfig().SetParallelCount(3).SetIsContinueWhenError(true), ctx,
|
||||||
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
vendorID := batchItemList[0].(int)
|
||||||
|
storeMaps, err := dao.GetStoresMapList(db, []int{vendorID}, nil, []int{model.StoreStatusOpened, model.StoreStatusClosed, model.StoreStatusHaveRest}, model.StoreStatusAll, model.StoreIsSyncAll, "", "", "")
|
||||||
|
storeManageStates, err := dao.GetStoreManageStateSimple(db, nil, nil, vendorID)
|
||||||
|
var (
|
||||||
|
storeMapsMap = make(map[int]*model.StoreMap)
|
||||||
|
storeManagesMap = make(map[int]*model.StoreManageState)
|
||||||
|
deleteList []int
|
||||||
|
createList, updateList []*model.StoreMap
|
||||||
|
)
|
||||||
|
for _, v := range storeMaps {
|
||||||
|
storeMapsMap[v.StoreID] = v
|
||||||
|
}
|
||||||
|
for _, v := range storeManageStates {
|
||||||
|
storeManagesMap[v.StoreID] = v
|
||||||
|
if storeMapsMap[v.StoreID] != nil {
|
||||||
|
updateList = append(updateList, storeMapsMap[v.StoreID])
|
||||||
|
} else {
|
||||||
|
deleteList = append(deleteList, v.StoreID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, v := range storeMapsMap {
|
||||||
|
if storeManagesMap[v.StoreID] == nil {
|
||||||
|
createList = append(createList, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
task2 := tasksch.NewParallelTask("deleteList", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx,
|
||||||
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
storeID := batchItemList[0].(int)
|
||||||
|
storeManage := &model.StoreManageState{
|
||||||
|
StoreID: storeID,
|
||||||
|
VendorID: vendorID,
|
||||||
|
}
|
||||||
|
dao.DeleteEntity(db, storeManage, "StoreID", "VendorID")
|
||||||
|
return retVal, err
|
||||||
|
}, deleteList)
|
||||||
|
tasksch.HandleTask(task2, task, true).Run()
|
||||||
|
task2.GetResult(0)
|
||||||
|
task3 := tasksch.NewParallelTask("createList", tasksch.NewParallelConfig().SetParallelCount(20).SetIsContinueWhenError(true), ctx,
|
||||||
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
storeMap := batchItemList[0].(*model.StoreMap)
|
||||||
|
if storeMap.VendorOrgCode == "" || storeMap.VendorStoreID == "" {
|
||||||
|
return retVal, err
|
||||||
|
}
|
||||||
|
storeDetail, _ := dao.GetStoreDetail(db, storeMap.StoreID, vendorID, storeMap.VendorOrgCode)
|
||||||
|
storeManage := buildStoreManageState(ctx, db, storeMap, storeDetail, messageFlag)
|
||||||
|
dao.CreateEntity(db, storeManage)
|
||||||
|
return retVal, err
|
||||||
|
}, createList)
|
||||||
|
tasksch.HandleTask(task3, task, true).Run()
|
||||||
|
task3.GetResult(0)
|
||||||
|
task4 := tasksch.NewParallelTask("updateList", tasksch.NewParallelConfig().SetParallelCount(20).SetIsContinueWhenError(true), ctx,
|
||||||
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
storeMap := batchItemList[0].(*model.StoreMap)
|
||||||
|
if storeMap.VendorOrgCode == "" || storeMap.VendorStoreID == "" {
|
||||||
|
return retVal, err
|
||||||
|
}
|
||||||
|
storeDetail, _ := dao.GetStoreDetail(db, storeMap.StoreID, vendorID, storeMap.VendorOrgCode)
|
||||||
|
storeManage := buildStoreManageState(ctx, db, storeMap, storeDetail, messageFlag)
|
||||||
|
if storeManageStates, err := dao.GetStoreManageStateSimple(db, []int{storeDetail.ID}, nil, vendorID); err == nil && len(storeManageStates) > 0 {
|
||||||
|
storeManage.ID = storeManageStates[0].ID
|
||||||
|
dao.UpdateEntity(db, storeManage)
|
||||||
|
}
|
||||||
|
return retVal, err
|
||||||
|
}, updateList)
|
||||||
|
tasksch.HandleTask(task4, task, true).Run()
|
||||||
|
task4.GetResult(0)
|
||||||
|
return retVal, err
|
||||||
|
}, vendorIDs)
|
||||||
|
tasksch.HandleTask(task, nil, true).Run()
|
||||||
|
task.GetID()
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildStoreManageState(ctx *jxcontext.Context, db *dao.DaoDB, storeMap *model.StoreMap, storeDetail *dao.StoreDetail, messageFlag bool) *model.StoreManageState {
|
||||||
|
var (
|
||||||
|
dayTimeBegin, dayTimeEnd = utils.Str2Time(utils.Time2Str(utils.Time2Date(time.Now())) + "00:00:00"), utils.Str2Time(utils.Time2Str(utils.Time2Date(time.Now())) + "23:59:59")
|
||||||
|
)
|
||||||
|
storeManage := &model.StoreManageState{
|
||||||
|
StoreID: storeMap.StoreID,
|
||||||
|
VendorID: storeMap.VendorID,
|
||||||
|
}
|
||||||
|
dao.WrapAddIDCULEntity(storeManage, ctx.GetUserName())
|
||||||
|
handler := partner.GetPurchasePlatformFromVendorID(storeMap.VendorID)
|
||||||
|
store, _ := handler.ReadStore(ctx, storeDetail.VendorOrgCode, storeDetail.VendorStoreID)
|
||||||
|
// if coverAreaFlag {
|
||||||
|
if storeMap.VendorID == model.VendorIDJD && store.DeliveryRangeType != model.DeliveryRangeTypePolygon {
|
||||||
|
storeManage.CoverArea = utils.Str2Float64(fmt.Sprintf("%.2f", math.Pi*utils.Str2Float64WithDefault(store.DeliveryRange, 0)/float64(1000)*utils.Str2Float64WithDefault(store.DeliveryRange, 0)/float64(1000)))
|
||||||
|
} else {
|
||||||
|
storeManage.CoverArea = utils.Str2Float64(fmt.Sprintf("%.2f", CalculateCoverArea(strings.Split(store.DeliveryRange, ";"), storeMap.VendorID)))
|
||||||
|
}
|
||||||
|
// }
|
||||||
|
//营业状态
|
||||||
|
storeManage.VendorStatus = store.Status
|
||||||
|
//不一致发消息
|
||||||
|
if messageFlag {
|
||||||
|
vendorStatus, status := -1, -1
|
||||||
|
if store.Status == model.StoreStatusOpened {
|
||||||
|
vendorStatus = 1
|
||||||
|
}
|
||||||
|
if storeDetail.Status == model.StoreStatusOpened {
|
||||||
|
status = 1
|
||||||
|
}
|
||||||
|
statusMap := map[int]string{
|
||||||
|
1: "营业",
|
||||||
|
-1: "休息",
|
||||||
|
}
|
||||||
|
if vendorStatus != status {
|
||||||
|
content := "您的门店 [" + storeDetail.Name + "],ID:[" + utils.Int2Str(storeDetail.ID) + "],在[" + model.VendorChineseNames[storeMap.VendorID] + "] 平台上营业状态和京西不一致!平台状态:【" + statusMap[vendorStatus] + "】,京西状态:【" + statusMap[status] + "】"
|
||||||
|
if user, err := dao.GetUserByID(db, "mobile", storeDetail.MarketManPhone); err == nil {
|
||||||
|
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "平台门店状态变化", content)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//营业时长
|
||||||
|
optime := jxutils.JxOperationTime2TimeByDate(storeDetail.CloseTime1, time.Now()).Sub(jxutils.JxOperationTime2TimeByDate(storeDetail.OpenTime1, time.Now())).Hours()
|
||||||
|
if storeDetail.CloseTime2 != 0 && storeDetail.OpenTime2 != 0 {
|
||||||
|
optime += jxutils.JxOperationTime2TimeByDate(storeDetail.CloseTime2, time.Now()).Sub(jxutils.JxOperationTime2TimeByDate(storeDetail.OpenTime2, time.Now())).Hours()
|
||||||
|
}
|
||||||
|
storeManage.OpenTime = utils.Str2Float64(fmt.Sprintf("%.2f", optime))
|
||||||
|
//商品数
|
||||||
|
highSkuCount := 0
|
||||||
|
storeSkus, _ := dao.GetStoresSkusForManageState(db, storeMap.StoreID, model.StoreSkuBindStatusNormal)
|
||||||
|
for _, v := range storeSkus {
|
||||||
|
if v.UnitPrice > v.MidUnitPrice {
|
||||||
|
highSkuCount++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
storeManage.SkuCount, storeManage.HighSkuCount = len(storeSkus), highSkuCount
|
||||||
|
//活动丰富度
|
||||||
|
ample, _ := handler.GetActAmple(ctx, storeDetail.VendorStoreID, storeDetail.VendorStoreID)
|
||||||
|
storeManage.ActAmple = ample
|
||||||
|
//订单
|
||||||
|
refuseOrderCount := 0
|
||||||
|
orderList, _ := dao.QueryOrdersForManageState(db, storeMap.StoreID, storeMap.VendorID, model.OrderStatusCanceled, dayTimeBegin, dayTimeEnd)
|
||||||
|
for _, v := range orderList {
|
||||||
|
if v.BindID == 0 {
|
||||||
|
refuseOrderCount++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
storeManage.NullOrderCount, storeManage.RefuseOrderCount = len(orderList), refuseOrderCount
|
||||||
|
//评分(美团)
|
||||||
|
if storeMap.VendorID == model.VendorIDMTWM {
|
||||||
|
mtapi := partner.CurAPIManager.GetAPI(model.VendorIDMTWM, storeDetail.VendorOrgCode).(*mtwmapi.API)
|
||||||
|
if scoreResult, err := mtapi.CommentScore(storeDetail.VendorStoreID); err == nil {
|
||||||
|
storeManage.StoreScore = scoreResult.AvgPoiScore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return storeManage
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetStoreManageState(ctx *jxcontext.Context, storeIDs, brandIDs []int, vendorID, sortType, offset, pageSize int) (pageInfo *model.PagedInfo, err error) {
|
||||||
|
var (
|
||||||
|
db = dao.GetDB()
|
||||||
|
)
|
||||||
|
//权限
|
||||||
|
if permission.IsRoled(ctx) {
|
||||||
|
if storeIDsMap, err := permission.GetUserStoresResultMap(ctx.GetUserID()); err == nil {
|
||||||
|
var storeIDs2 []int
|
||||||
|
if len(storeIDs) > 0 {
|
||||||
|
for _, v := range storeIDs {
|
||||||
|
if storeIDsMap[v] != 0 {
|
||||||
|
storeIDs2 = append(storeIDs2, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(storeIDs2) == 0 {
|
||||||
|
storeIDs2 = append(storeIDs2, -1)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for k, _ := range storeIDsMap {
|
||||||
|
storeIDs2 = append(storeIDs2, k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
storeIDs = nil
|
||||||
|
storeIDs = storeIDs2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dao.GetStoreManageState(db, storeIDs, brandIDs, vendorID, sortType, offset, pageSize)
|
||||||
|
}
|
||||||
|
|
||||||
|
func CalculateCoverArea(coordinate []string, vendorID int) (area float64) {
|
||||||
|
//我先把地理坐标转成了平面坐标(百度的方法)
|
||||||
|
//然后按多个坐标求面积公式求的面积(百度的方法)
|
||||||
|
if len(coordinate) == 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
var xyList [][2]float64
|
||||||
|
for _, v := range coordinate {
|
||||||
|
cell := strings.Split(v, ",")
|
||||||
|
if len(cell) == 0 || len(cell) == 1 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
var lat, lng float64
|
||||||
|
if vendorID == model.VendorIDJD || vendorID == model.VendorIDEBAI {
|
||||||
|
lng = utils.Str2Float64WithDefault(cell[0], 0)
|
||||||
|
lat = utils.Str2Float64WithDefault(cell[1], 0)
|
||||||
|
} else {
|
||||||
|
lat = utils.Str2Float64WithDefault(cell[0], 0)
|
||||||
|
lng = utils.Str2Float64WithDefault(cell[1], 0)
|
||||||
|
}
|
||||||
|
xys := jxutils.MillierConvertion(lat, lng)
|
||||||
|
xyList = append(xyList, xys)
|
||||||
|
}
|
||||||
|
var sum float64 = 0
|
||||||
|
if len(xyList) == 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
for i := 0; i < len(xyList)-1; i++ {
|
||||||
|
// sum += (xyList[i+1][0] - xyList[i][0]) * (xyList[i+1][1] + xyList[i][1])
|
||||||
|
sum += (xyList[i][0]*xyList[i+1][1] - xyList[i+1][0]*xyList[i][1])
|
||||||
|
}
|
||||||
|
// sum += (xyList[0][0] - xyList[len(xyList)-1][0]) * (xyList[0][1] + xyList[len(xyList)-1][1])
|
||||||
|
sum += (xyList[len(xyList)-1][0]*xyList[0][1] - xyList[0][0]*xyList[len(xyList)-1][1])
|
||||||
|
sum /= float64(2)
|
||||||
|
sum = math.Abs(sum)
|
||||||
|
sum = utils.Str2Float64(fmt.Sprintf("%.2f", sum))
|
||||||
|
return sum
|
||||||
|
}
|
||||||
|
|||||||
@@ -1745,20 +1745,23 @@ func UploadJdsImage(ctx *jxcontext.Context) (err error) {
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
//京东商城补身份证
|
// 京东商城补身份证
|
||||||
// var (
|
// var (
|
||||||
// storeMaps []*model.StoreMap
|
// storeMaps []*model.StoreMap
|
||||||
// db = dao.GetDB()
|
// db = dao.GetDB()
|
||||||
// )
|
// )
|
||||||
// sql := `
|
// sql := `
|
||||||
// SELECT * from store_map where vendor_id = 5 and deleted_at = '1970-01-01 00:00:00' and vendor_org_code = 2
|
// SELECT * from store_map where vendor_id = 5 and deleted_at = '1970-01-01 00:00:00' and vendor_org_code = 2
|
||||||
// and store_id <> 100206
|
// AND store_id = 100117
|
||||||
// `
|
// `
|
||||||
// dao.GetRows(db, &storeMaps, sql, nil)
|
// dao.GetRows(db, &storeMaps, sql, nil)
|
||||||
// for _, v := range storeMaps {
|
// for _, v := range storeMaps {
|
||||||
|
// task := tasksch.NewParallelTask("uuuuu", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx,
|
||||||
|
// func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
// v := batchItemList[0].(*model.StoreMap)
|
||||||
// detail, _ := api.JdShop2API.ShopDetail(utils.Str2Int(v.VendorStoreID))
|
// detail, _ := api.JdShop2API.ShopDetail(utils.Str2Int(v.VendorStoreID))
|
||||||
// storeDetail, _ := dao.GetStoreDetail(db, v.StoreID, model.VendorIDJDShop, "2")
|
// storeDetail, _ := dao.GetStoreDetail(db, v.StoreID, model.VendorIDJDShop, "2")
|
||||||
|
// api.JdShop2API.UpdateExpand(utils.Str2Int(v.VendorStoreID))
|
||||||
// var (
|
// var (
|
||||||
// url2 string
|
// url2 string
|
||||||
// idCode string
|
// idCode string
|
||||||
@@ -1785,7 +1788,7 @@ func UploadJdsImage(ctx *jxcontext.Context) (err error) {
|
|||||||
// }
|
// }
|
||||||
// ex := storeDetail.IDExpire
|
// ex := storeDetail.IDExpire
|
||||||
// if ex == "" {
|
// if ex == "" {
|
||||||
// ex = utils.Time2Str(utils.Str2Time(storeDetail.IDValid).AddDate(20, 0, 0))
|
// ex = utils.Time2Str(utils.Str2Time(storeDetail.IDValid).AddDate(10, 0, 0))
|
||||||
// }
|
// }
|
||||||
// if !strings.Contains(ex, "00:00:00") {
|
// if !strings.Contains(ex, "00:00:00") {
|
||||||
// ex += " 00:00:00"
|
// ex += " 00:00:00"
|
||||||
@@ -1799,7 +1802,7 @@ func UploadJdsImage(ctx *jxcontext.Context) (err error) {
|
|||||||
// BussinessEndTime: detail.BussinessEndTime,
|
// BussinessEndTime: detail.BussinessEndTime,
|
||||||
// ImgURL: detail.ImgURL,
|
// ImgURL: detail.ImgURL,
|
||||||
// StorePhone: detail.StorePhone,
|
// StorePhone: detail.StorePhone,
|
||||||
// AddName: storeDetail.Address,
|
// AddName: detail.AddName,
|
||||||
// AddCode1: detail.AddCode1,
|
// AddCode1: detail.AddCode1,
|
||||||
// AddCode2: detail.AddCode2,
|
// AddCode2: detail.AddCode2,
|
||||||
// AddCode3: detail.AddCode3,
|
// AddCode3: detail.AddCode3,
|
||||||
@@ -1810,13 +1813,20 @@ func UploadJdsImage(ctx *jxcontext.Context) (err error) {
|
|||||||
// QualificationName: "营业执照",
|
// QualificationName: "营业执照",
|
||||||
// QualificationNo: detail.QualificationInfoTOList[0].QualificationNo,
|
// QualificationNo: detail.QualificationInfoTOList[0].QualificationNo,
|
||||||
// QualificationURL: detail.QualificationInfoTOList[0].QualificationURL,
|
// QualificationURL: detail.QualificationInfoTOList[0].QualificationURL,
|
||||||
|
// QualificationBusType: 2,
|
||||||
|
// QualificationBusName: storeDetail.LicenceCorpName,
|
||||||
// StartTime: detail.QualificationInfoTOList[0].StartTime,
|
// StartTime: detail.QualificationInfoTOList[0].StartTime,
|
||||||
// EndingTime: detail.QualificationInfoTOList[0].EndingTime,
|
// EndingTime: utils.Time2Str(utils.Str2Time(detail.QualificationInfoTOList[0].StartTime).AddDate(10, 0, 0)),
|
||||||
// Time: []string{detail.QualificationInfoTOList[0].StartTime, detail.QualificationInfoTOList[0].EndingTime},
|
// Time: []string{detail.QualificationInfoTOList[0].StartTime, detail.QualificationInfoTOList[0].EndingTime},
|
||||||
// },
|
// },
|
||||||
// &jdshopapi.QualificationRequests{
|
// &jdshopapi.QualificationRequests{
|
||||||
// QualificationID: 42,
|
// QualificationID: 42,
|
||||||
// QualificationName: "身份证件",
|
// QualificationName: "身份证件",
|
||||||
|
// QualificationNo: detail.QualificationInfoTOList[1].QualificationNo,
|
||||||
|
// QualificationURL: detail.QualificationInfoTOList[1].QualificationURL,
|
||||||
|
// StartTime: detail.QualificationInfoTOList[1].StartTime,
|
||||||
|
// EndingTime: detail.QualificationInfoTOList[1].EndingTime,
|
||||||
|
// Time: []string{detail.QualificationInfoTOList[1].StartTime, detail.QualificationInfoTOList[1].EndingTime},
|
||||||
// QualificationNo: idCode,
|
// QualificationNo: idCode,
|
||||||
// QualificationURL: url2,
|
// QualificationURL: url2,
|
||||||
// StartTime: startTime,
|
// StartTime: startTime,
|
||||||
@@ -1825,7 +1835,10 @@ func UploadJdsImage(ctx *jxcontext.Context) (err error) {
|
|||||||
// },
|
// },
|
||||||
// },
|
// },
|
||||||
// })
|
// })
|
||||||
// }
|
// return retVal, err
|
||||||
|
// }, storeMaps)
|
||||||
|
// tasksch.HandleTask(task, nil, true).Run()
|
||||||
|
// task.GetID()
|
||||||
// var (
|
// var (
|
||||||
// db = dao.GetDB()
|
// db = dao.GetDB()
|
||||||
// vendorThingIDs []int64
|
// vendorThingIDs []int64
|
||||||
@@ -1865,18 +1878,21 @@ func UploadJdsImage(ctx *jxcontext.Context) (err error) {
|
|||||||
// }, storeMaps)
|
// }, storeMaps)
|
||||||
// tasksch.HandleTask(task, nil, true).Run()
|
// tasksch.HandleTask(task, nil, true).Run()
|
||||||
// _, err = task.GetResult(0)
|
// _, err = task.GetResult(0)
|
||||||
stores := []int{}
|
//京东账号更新
|
||||||
for i := 1; i < 26; i++ {
|
var (
|
||||||
result, _ := api.JdShop2API.ShopList(i)
|
db = dao.GetDB()
|
||||||
for _, v := range result.List {
|
)
|
||||||
if v.Kilometres == "" {
|
if configs, err := dao.QueryConfigs(dao.GetDB(), "jdConfigCookie", model.ConfigTypeCookie, ""); err == nil {
|
||||||
if err = api.JdShop2API.CreateGisFence(v.StoreID, "1"); err != nil {
|
api.JdAPI.SetCookieWithStr(configs[0].Value)
|
||||||
stores = append(stores, v.StoreID)
|
result, _ := api.JdAPI.GetJdAppInfo()
|
||||||
|
if result != nil {
|
||||||
|
if vocs, _ := dao.GetVendorOrgCode(db, model.VendorIDJD, result.OrgCode, model.VendorOrgTypePlatform); len(vocs) > 0 {
|
||||||
|
vocs[0].AppKey = result.AppKey
|
||||||
|
vocs[0].AppSecret = result.AppSecret
|
||||||
|
dao.UpdateEntity(db, vocs[0], "AppKey", "AppSecret")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
fmt.Println("resultstores112", stores)
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -267,6 +267,26 @@ func WalkingDistance(lng1, lat1, lng2, lat2 float64) (distance float64) {
|
|||||||
return distance
|
return distance
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//经纬度坐标转换到平面坐标
|
||||||
|
func MillierConvertion(lat float64, lon float64) [2]float64 {
|
||||||
|
var L, H, W, temp, mill, x, y float64
|
||||||
|
L = 6371.393 * math.Pi * 2 //地球周长
|
||||||
|
W = L // 平面展开后,x轴等于周长
|
||||||
|
H = L / 2 // y轴约等于周长一半
|
||||||
|
mill = 2.3 // 米勒投影中的一个常数,范围大约在正负2.3之间
|
||||||
|
temp = math.Pi
|
||||||
|
x = lon * temp / 180 // 将经度从度数转换为弧度
|
||||||
|
y = lat * temp / 180 // 将纬度从度数转换为弧度
|
||||||
|
y = 1.25 * math.Log(math.Tan(0.25*temp+0.4*y)) // 米勒投影的转换
|
||||||
|
// 弧度转为实际距离
|
||||||
|
x = (W / 2) + (W/(2*math.Pi))*x
|
||||||
|
y = (H / 2) - (H/(2*mill))*y
|
||||||
|
x = utils.Str2Float64(fmt.Sprintf("%.2f", x))
|
||||||
|
y = utils.Str2Float64(fmt.Sprintf("%.2f", y))
|
||||||
|
var result = [2]float64{x, y}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
func StandardCoordinate2Int(value float64) int {
|
func StandardCoordinate2Int(value float64) int {
|
||||||
return int(math.Round(value * 1000000))
|
return int(math.Round(value * 1000000))
|
||||||
}
|
}
|
||||||
@@ -405,6 +425,7 @@ func ComposeSkuNameForMTWM(prefix, name, comment, unit string, spec_quality floa
|
|||||||
}
|
}
|
||||||
skuName += name
|
skuName += name
|
||||||
strBuilder.WriteString(name)
|
strBuilder.WriteString(name)
|
||||||
|
strBuilder.WriteString("约")
|
||||||
if unit != "" {
|
if unit != "" {
|
||||||
strBuilder.WriteString(ComposeSkuSpec(spec_quality, spec_unit))
|
strBuilder.WriteString(ComposeSkuSpec(spec_quality, spec_unit))
|
||||||
strBuilder.WriteString("/")
|
strBuilder.WriteString("/")
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/astaxie/beego"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi"
|
"git.rosy.net.cn/baseapi/platformapi"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
@@ -503,12 +505,16 @@ func GetVendorName(vendorID int) (vendorName string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func CaculateSkuEarningPrice(shopPrice, salePrice int64, storePayPercentage int) (earningPrice int64) {
|
func CaculateSkuEarningPrice(shopPrice, salePrice int64, storePayPercentage int) (earningPrice int64) {
|
||||||
|
if beego.BConfig.RunMode == "jxgy" {
|
||||||
earningPrice = salePrice
|
earningPrice = salePrice
|
||||||
if salePrice != 0 {
|
if salePrice != 0 {
|
||||||
if shopPrice > 0 && shopPrice < earningPrice {
|
if shopPrice > 0 && shopPrice < earningPrice {
|
||||||
earningPrice = shopPrice
|
earningPrice = shopPrice
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
earningPrice = shopPrice
|
||||||
|
}
|
||||||
storePayPercentage = ConstrainPayPercentage(storePayPercentage)
|
storePayPercentage = ConstrainPayPercentage(storePayPercentage)
|
||||||
if storePayPercentage <= 0 {
|
if storePayPercentage <= 0 {
|
||||||
storePayPercentage = model.DefaultEarningPricePercentage
|
storePayPercentage = model.DefaultEarningPricePercentage
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ func getOrderDetailBrief(order *model.GoodsOrder) (brief string) {
|
|||||||
if order.EarningType == model.EarningTypePoints {
|
if order.EarningType == model.EarningTypePoints {
|
||||||
price = order.ActualPayPrice
|
price = order.ActualPayPrice
|
||||||
} else {
|
} else {
|
||||||
price = order.ShopPrice
|
price = order.EarningPrice
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sb.WriteString(jxutils.IntPrice2StandardString(price))
|
sb.WriteString(jxutils.IntPrice2StandardString(price))
|
||||||
|
|||||||
@@ -190,7 +190,7 @@ func getOrderDetailBrief(order *model.GoodsOrder) (brief string) {
|
|||||||
if order.EarningType == model.EarningTypePoints {
|
if order.EarningType == model.EarningTypePoints {
|
||||||
price = order.ActualPayPrice
|
price = order.ActualPayPrice
|
||||||
} else {
|
} else {
|
||||||
price = order.ShopPrice
|
price = order.EarningPrice
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sb.WriteString(jxutils.IntPrice2StandardString(price))
|
sb.WriteString(jxutils.IntPrice2StandardString(price))
|
||||||
@@ -807,6 +807,9 @@ func SendStoreMessage(ctx *jxcontext.Context, title, content string, storeIDs []
|
|||||||
storeIDs2 = append(storeIDs2, v)
|
storeIDs2 = append(storeIDs2, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(storeIDs2) == 0 {
|
||||||
|
storeIDs2 = append(storeIDs2, -1)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
for k, _ := range storeIDsMap {
|
for k, _ := range storeIDsMap {
|
||||||
storeIDs2 = append(storeIDs2, k)
|
storeIDs2 = append(storeIDs2, k)
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ func GetVendorOrgCode(db *DaoDB, vendorID int, vendorOrgCode, vendorType string)
|
|||||||
sql += " AND vendor_type = ?"
|
sql += " AND vendor_type = ?"
|
||||||
sqlParams = append(sqlParams, vendorType)
|
sqlParams = append(sqlParams, vendorType)
|
||||||
}
|
}
|
||||||
|
sql += " ORDER BY comment"
|
||||||
err = GetRows(db, &vendorOrgs, sql, sqlParams)
|
err = GetRows(db, &vendorOrgs, sql, sqlParams)
|
||||||
return vendorOrgs, err
|
return vendorOrgs, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1607,3 +1607,40 @@ func GetUserCoupons(db *DaoDB, couponIDs []int, userIDs, mobiles []string, userS
|
|||||||
err = GetRows(db, &userCoupons, sql, sqlParams)
|
err = GetRows(db, &userCoupons, sql, sqlParams)
|
||||||
return userCoupons, err
|
return userCoupons, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type QueryOrdersForManageStateResult struct {
|
||||||
|
VendorOrderID string `orm:"column(vendor_order_id)"`
|
||||||
|
BindID int `orm:"column(bind_id)"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func QueryOrdersForManageState(db *DaoDB, storeID, vendorID, status int, fromTime, toTime time.Time) (userCoupons []*QueryOrdersForManageStateResult, err error) {
|
||||||
|
sql := `
|
||||||
|
SELECT a.vendor_order_id ,b.id bind_id
|
||||||
|
FROM goods_order a
|
||||||
|
LEFT JOIN waybill b ON a.vendor_order_id = b.vendor_order_id
|
||||||
|
WHERE 1 = 1
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{}
|
||||||
|
if storeID != 0 {
|
||||||
|
sql += " AND (a.storeID = ? OR a.jx_store_id = ?)"
|
||||||
|
sqlParams = append(sqlParams, storeID, storeID)
|
||||||
|
}
|
||||||
|
if vendorID != -1 {
|
||||||
|
sql += " AND a.vendor_id = ?"
|
||||||
|
sqlParams = append(sqlParams, vendorID)
|
||||||
|
}
|
||||||
|
if status != 0 {
|
||||||
|
sql += " AND a.status = ?"
|
||||||
|
sqlParams = append(sqlParams, status)
|
||||||
|
}
|
||||||
|
if !utils.IsTimeZero(fromTime) {
|
||||||
|
sql += " AND a.order_created_at > ?"
|
||||||
|
sqlParams = append(sqlParams, fromTime)
|
||||||
|
}
|
||||||
|
if !utils.IsTimeZero(toTime) {
|
||||||
|
sql += " AND a.order_created_at < ?"
|
||||||
|
sqlParams = append(sqlParams, toTime)
|
||||||
|
}
|
||||||
|
err = GetRows(db, &userCoupons, sql, sqlParams)
|
||||||
|
return userCoupons, err
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetMenu(db *DaoDB, name string, level int, userID string) (menus []*model.Menu, err error) {
|
func GetMenu(db *DaoDB, name string, level, menuType int, userID string) (menus []*model.Menu, err error) {
|
||||||
sqlParams := []interface{}{}
|
sqlParams := []interface{}{}
|
||||||
sql := `
|
sql := `
|
||||||
SELECT DISTINCT a.*
|
SELECT DISTINCT a.*
|
||||||
@@ -29,12 +29,16 @@ func GetMenu(db *DaoDB, name string, level int, userID string) (menus []*model.M
|
|||||||
sql += " AND a.level = ?"
|
sql += " AND a.level = ?"
|
||||||
sqlParams = append(sqlParams, level)
|
sqlParams = append(sqlParams, level)
|
||||||
}
|
}
|
||||||
|
if menuType != 0 {
|
||||||
|
sql += " AND a.type = ?"
|
||||||
|
sqlParams = append(sqlParams, menuType)
|
||||||
|
}
|
||||||
sql += " ORDER BY a.id"
|
sql += " ORDER BY a.id"
|
||||||
err = GetRows(db, &menus, sql, sqlParams)
|
err = GetRows(db, &menus, sql, sqlParams)
|
||||||
return menus, err
|
return menus, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetMenuWithUser(db *DaoDB, name string, level int, userID string) (menus []*model.Menu, err error) {
|
func GetMenuWithUser(db *DaoDB, name string, level, menuType int, userID string) (menus []*model.Menu, err error) {
|
||||||
sql := `
|
sql := `
|
||||||
SELECT DISTINCT b.* FROM (
|
SELECT DISTINCT b.* FROM (
|
||||||
SELECT a.id,a.parent_id
|
SELECT a.id,a.parent_id
|
||||||
@@ -43,9 +47,10 @@ func GetMenuWithUser(db *DaoDB, name string, level int, userID string) (menus []
|
|||||||
JOIN role_menu c ON c.menu_id = a.id AND c.role_id = b.role_id AND c.deleted_at = ?
|
JOIN role_menu c ON c.menu_id = a.id AND c.role_id = b.role_id AND c.deleted_at = ?
|
||||||
WHERE a.deleted_at = ?)a
|
WHERE a.deleted_at = ?)a
|
||||||
JOIN menu b ON (b.id = a.id OR b.id = a.parent_id)
|
JOIN menu b ON (b.id = a.id OR b.id = a.parent_id)
|
||||||
|
WHERE b.type = ?
|
||||||
ORDER BY b.id
|
ORDER BY b.id
|
||||||
`
|
`
|
||||||
sqlParams := []interface{}{userID, utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue}
|
sqlParams := []interface{}{userID, utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue, menuType}
|
||||||
err = GetRows(db, &menus, sql, sqlParams)
|
err = GetRows(db, &menus, sql, sqlParams)
|
||||||
return menus, err
|
return menus, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ type PriceReferSnapshotExt struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//查询统计订单信息
|
//查询统计订单信息
|
||||||
func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate time.Time, toDate time.Time) (statisticsReportForOrdersList []*StatisticsReportForOrdersList, err error) {
|
func GetStatisticsReportForOrders(db *DaoDB, storeIDs, vendorIDs []int, fromDate time.Time, toDate time.Time) (statisticsReportForOrdersList []*StatisticsReportForOrdersList, err error) {
|
||||||
sql := `
|
sql := `
|
||||||
SELECT
|
SELECT
|
||||||
c.id store_id,
|
c.id store_id,
|
||||||
@@ -68,8 +68,8 @@ func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate time.Time,
|
|||||||
s.pm_subsidy_money,
|
s.pm_subsidy_money,
|
||||||
s.earning_price,
|
s.earning_price,
|
||||||
s.total_gross_profit,
|
s.total_gross_profit,
|
||||||
IF(c.jx_brand_fee_factor = 0 AND c.market_add_fee_factor = 0,total_gross_profit,(total_gross_profit*c.jx_brand_fee_factor)/(c.jx_brand_fee_factor+market_add_fee_factor)) com_gross_profit,
|
IF(c.jx_brand_fee_factor = 0 AND c.market_add_fee_factor = 0,s.total_gross_profit,(s.total_gross_profit*c.jx_brand_fee_factor)/(c.jx_brand_fee_factor+market_add_fee_factor)) com_gross_profit,
|
||||||
IF(c.jx_brand_fee_factor = 0 AND c.market_add_fee_factor = 0,0,(total_gross_profit*c.market_add_fee_factor)/(c.jx_brand_fee_factor+market_add_fee_factor)) city_manager_gross_profit,
|
IF(c.jx_brand_fee_factor = 0 AND c.market_add_fee_factor = 0,0,(s.total_gross_profit*c.market_add_fee_factor)/(c.jx_brand_fee_factor+market_add_fee_factor)) city_manager_gross_profit,
|
||||||
c.status, c.tel1,
|
c.status, c.tel1,
|
||||||
IF(mm.name <> '', mm.name, mm.user_id2) market_man_name,
|
IF(mm.name <> '', mm.name, mm.user_id2) market_man_name,
|
||||||
IF(om.name <> '', om.name, om.user_id2) operator_name,
|
IF(om.name <> '', om.name, om.user_id2) operator_name,
|
||||||
@@ -82,28 +82,38 @@ func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate time.Time,
|
|||||||
LEFT JOIN user om ON om.mobile <> '' AND om.mobile = c.operator_phone
|
LEFT JOIN user om ON om.mobile <> '' AND om.mobile = c.operator_phone
|
||||||
LEFT JOIN user om2 ON om2.mobile <> '' AND om2.mobile = c.operator_phone2
|
LEFT JOIN user om2 ON om2.mobile <> '' AND om2.mobile = c.operator_phone2
|
||||||
LEFT JOIN user om3 ON om3.mobile <> '' AND om3.mobile = c.operator_phone3
|
LEFT JOIN user om3 ON om3.mobile <> '' AND om3.mobile = c.operator_phone3
|
||||||
LEFT JOIN
|
JOIN
|
||||||
(
|
(
|
||||||
|
SELECT ss.*,
|
||||||
|
ss.earning_price1 - IFNULL(ss.afs_shop_price,0) earning_price,
|
||||||
|
ss.total_shop_money1 - IFNULL(ss.afs_total_money,0) total_shop_money,
|
||||||
|
ss.total_gross_profit1 + IFNULL(ss.afs_shop_price,0) - IFNULL(ss.afs_total_money,0) - ss.order_counts*0.8*100 total_gross_profit
|
||||||
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
IF(a.jx_store_id <> 0,a.jx_store_id,store_id) store_id,
|
IF(a.jx_store_id <> 0,a.jx_store_id,a.store_id) store_id,
|
||||||
COUNT(*) order_counts,
|
COUNT(*) order_counts,
|
||||||
SUM(sale_price) sale_price,
|
SUM(a.sale_price) sale_price,
|
||||||
SUM(actual_pay_price) actual_pay_price,
|
SUM(a.actual_pay_price) actual_pay_price,
|
||||||
SUM(shop_price) shop_price,
|
SUM(a.shop_price) shop_price,
|
||||||
SUM(discount_money) discount_money,
|
SUM(a.discount_money) discount_money,
|
||||||
SUM(desired_fee) desired_fee,
|
SUM(b.desired_fee) desired_fee,
|
||||||
SUM(distance_freight_money) distance_freight_money,
|
SUM(a.distance_freight_money) distance_freight_money,
|
||||||
SUM(IF(a.vendor_id = a.waybill_vendor_id,waybill_tip_money,0)) waybill_tip_money,
|
SUM(IF(a.vendor_id = a.waybill_vendor_id,a.waybill_tip_money,0)) waybill_tip_money,
|
||||||
SUM(total_shop_money) total_shop_money,
|
SUM(a.total_shop_money) total_shop_money1,
|
||||||
SUM(pm_subsidy_money) pm_subsidy_money,
|
SUM(a.pm_subsidy_money) pm_subsidy_money,
|
||||||
SUM(earning_price) earning_price,
|
SUM(IF(a.earning_type = 1, a.earning_price, a.new_earning_price)) earning_price1,
|
||||||
SUM(total_shop_money-earning_price-desired_fee-distance_freight_money-waybill_tip_money-80) total_gross_profit
|
SUM(a.total_shop_money-IF(a.earning_type = 1, a.earning_price, a.new_earning_price)-b.desired_fee) total_gross_profit1,
|
||||||
|
SUM(d.shop_price) afs_shop_price,
|
||||||
|
SUM(d.refund_money_by_cal) afs_total_money
|
||||||
FROM goods_order a
|
FROM goods_order a
|
||||||
LEFT JOIN waybill b ON IF(a.waybill_vendor_id = -1,a.vendor_order_id,a.vendor_waybill_id) = b.vendor_waybill_id
|
LEFT JOIN waybill b ON IF(a.waybill_vendor_id = -1,a.vendor_order_id,a.vendor_waybill_id) = b.vendor_waybill_id
|
||||||
WHERE a.status != ?
|
LEFT JOIN afs_order c ON c.vendor_order_id = a.vendor_order_id
|
||||||
|
LEFT JOIN order_sku_financial d ON d.afs_order_id = c.afs_order_id AND d.is_afs_order = ?
|
||||||
|
WHERE a.status = ?
|
||||||
`
|
`
|
||||||
sqlParams := []interface{}{
|
sqlParams := []interface{}{
|
||||||
model.OrderStatusCanceled, //排除已取消的订单
|
model.YES,
|
||||||
|
model.OrderStatusFinished,
|
||||||
}
|
}
|
||||||
if !utils.IsTimeZero(fromDate) && !utils.IsTimeZero(toDate) {
|
if !utils.IsTimeZero(fromDate) && !utils.IsTimeZero(toDate) {
|
||||||
sql += ` AND a.order_created_at BETWEEN ? AND ?`
|
sql += ` AND a.order_created_at BETWEEN ? AND ?`
|
||||||
@@ -113,9 +123,13 @@ func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate time.Time,
|
|||||||
sql += ` AND IF(a.jx_store_id != 0, a.jx_store_id, a.store_id) IN(` + GenQuestionMarks(len(storeIDs)) + `)`
|
sql += ` AND IF(a.jx_store_id != 0, a.jx_store_id, a.store_id) IN(` + GenQuestionMarks(len(storeIDs)) + `)`
|
||||||
sqlParams = append(sqlParams, storeIDs)
|
sqlParams = append(sqlParams, storeIDs)
|
||||||
}
|
}
|
||||||
|
if len(vendorIDs) > 0 {
|
||||||
|
sql += ` AND a.vendor_id IN(` + GenQuestionMarks(len(vendorIDs)) + `)`
|
||||||
|
sqlParams = append(sqlParams, vendorIDs)
|
||||||
|
}
|
||||||
sql += `
|
sql += `
|
||||||
GROUP BY 1
|
GROUP BY 1
|
||||||
)s
|
)ss ) s
|
||||||
ON s.store_id = c.id
|
ON s.store_id = c.id
|
||||||
`
|
`
|
||||||
if len(storeIDs) > 0 {
|
if len(storeIDs) > 0 {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package dao
|
package dao
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/aliupcapi"
|
"git.rosy.net.cn/baseapi/platformapi/aliupcapi"
|
||||||
@@ -96,6 +97,31 @@ func GetCategories(db *DaoDB, parentID, level int, catIDs []int, isExd bool) (ca
|
|||||||
return cats, GetRows(db, &cats, sql, params)
|
return cats, GetRows(db, &cats, sql, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetCategoriesForStore(db *DaoDB, parentID, level int, catIDs []int) (cats []*model.StoreCategoryMap, err error) {
|
||||||
|
sql := `
|
||||||
|
SELECT t1.*, t1.seq store_category_seq, t1.id category_id, t1.name store_category_name
|
||||||
|
FROM sku_category t1
|
||||||
|
WHERE t1.deleted_at = ?`
|
||||||
|
params := []interface{}{
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
}
|
||||||
|
if parentID != -1 {
|
||||||
|
sql += " AND t1.parent_id = ?"
|
||||||
|
params = append(params, parentID)
|
||||||
|
}
|
||||||
|
if len(catIDs) > 0 {
|
||||||
|
sql += " AND t1.id IN (" + GenQuestionMarks(len(catIDs)) + ")"
|
||||||
|
params = append(params, catIDs)
|
||||||
|
}
|
||||||
|
if level > 0 {
|
||||||
|
sql += " AND t1.level = ?"
|
||||||
|
params = append(params, level)
|
||||||
|
}
|
||||||
|
sql += ` AND t1.is_exd_spec = 0
|
||||||
|
ORDER BY t1.level, t1.seq`
|
||||||
|
return cats, GetRows(db, &cats, sql, params)
|
||||||
|
}
|
||||||
|
|
||||||
func GetSkus(db *DaoDB, skuIDs, nameIDs, statuss, catIDs []int, eclpIDs []string) (skuList []*model.SkuAndName, err error) {
|
func GetSkus(db *DaoDB, skuIDs, nameIDs, statuss, catIDs []int, eclpIDs []string) (skuList []*model.SkuAndName, err error) {
|
||||||
sql := `
|
sql := `
|
||||||
SELECT t1.*, t2.name, t2.unit, t2.prefix, t2.is_spu, t2.ex_prefix, t2.ex_prefix_begin, t2.ex_prefix_end, t2.upc
|
SELECT t1.*, t2.name, t2.unit, t2.prefix, t2.is_spu, t2.ex_prefix, t2.ex_prefix_begin, t2.ex_prefix_end, t2.upc
|
||||||
@@ -198,6 +224,7 @@ func GetSkuByCats(db *DaoDB, catIDs []int) (skuList []*model.Sku, err error) {
|
|||||||
|
|
||||||
// 多门店平台使用,当前只有京东
|
// 多门店平台使用,当前只有京东
|
||||||
func GetSkuCategoryWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string, parentCatID int, catIDs []int, mustDirty bool) (catList []*SkuStoreCatInfo, err error) {
|
func GetSkuCategoryWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string, parentCatID int, catIDs []int, mustDirty bool) (catList []*SkuStoreCatInfo, err error) {
|
||||||
|
sqlParams := []interface{}{}
|
||||||
sql := `
|
sql := `
|
||||||
SELECT
|
SELECT
|
||||||
t1m.vendor_id, t1m.vendor_org_code,
|
t1m.vendor_id, t1m.vendor_org_code,
|
||||||
@@ -216,15 +243,26 @@ func GetSkuCategoryWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string,
|
|||||||
t1pm.sync_status parent_cat_sync_status
|
t1pm.sync_status parent_cat_sync_status
|
||||||
FROM sku_category t1
|
FROM sku_category t1
|
||||||
LEFT JOIN thing_map t1m ON t1m.thing_id = t1.id AND t1m.thing_type = ? AND t1m.deleted_at = ?
|
LEFT JOIN thing_map t1m ON t1m.thing_id = t1.id AND t1m.thing_type = ? AND t1m.deleted_at = ?
|
||||||
|
`
|
||||||
|
sqlParams = append(sqlParams,
|
||||||
|
model.ThingTypeCategory,
|
||||||
|
utils.DefaultTimeValue)
|
||||||
|
if len(vendorIDs) > 0 {
|
||||||
|
sql += " AND t1m.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
|
||||||
|
sqlParams = append(sqlParams, vendorIDs)
|
||||||
|
}
|
||||||
|
if len(appOrgCodes) > 0 {
|
||||||
|
sql += " AND t1m.vendor_org_code IN (" + GenQuestionMarks(len(appOrgCodes)) + ")"
|
||||||
|
sqlParams = append(sqlParams, appOrgCodes)
|
||||||
|
}
|
||||||
|
sql += `
|
||||||
LEFT JOIN vendor_org_code a ON a.vendor_org_code = t1m.vendor_org_code AND a.vendor_id = t1m.vendor_id AND a.deleted_at = ?
|
LEFT JOIN vendor_org_code a ON a.vendor_org_code = t1m.vendor_org_code AND a.vendor_id = t1m.vendor_id AND a.deleted_at = ?
|
||||||
LEFT JOIN vendor_category_map b ON b.vendor_org_code = t1m.vendor_org_code AND b.vendor_id = t1m.vendor_id AND b.category_id = t1m.thing_id AND b.deleted_at = ?
|
LEFT JOIN vendor_category_map b ON b.vendor_org_code = t1m.vendor_org_code AND b.vendor_id = t1m.vendor_id AND b.category_id = t1m.thing_id AND b.deleted_at = ?
|
||||||
`
|
`
|
||||||
sqlParams := []interface{}{
|
sqlParams = append(sqlParams,
|
||||||
model.ThingTypeCategory,
|
|
||||||
utils.DefaultTimeValue,
|
utils.DefaultTimeValue,
|
||||||
utils.DefaultTimeValue,
|
utils.DefaultTimeValue,
|
||||||
utils.DefaultTimeValue,
|
)
|
||||||
}
|
|
||||||
sql += `
|
sql += `
|
||||||
LEFT JOIN sku_category t1p ON t1p.id = t1.parent_id
|
LEFT JOIN sku_category t1p ON t1p.id = t1.parent_id
|
||||||
LEFT JOIN thing_map t1pm ON t1pm.thing_id = t1p.id AND t1pm.thing_type = ? AND t1m.deleted_at = ?
|
LEFT JOIN thing_map t1pm ON t1pm.thing_id = t1p.id AND t1pm.thing_type = ? AND t1m.deleted_at = ?
|
||||||
@@ -248,15 +286,9 @@ func GetSkuCategoryWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string,
|
|||||||
sql += " AND t1.parent_id = ?"
|
sql += " AND t1.parent_id = ?"
|
||||||
sqlParams = append(sqlParams, parentCatID)
|
sqlParams = append(sqlParams, parentCatID)
|
||||||
}
|
}
|
||||||
if len(vendorIDs) > 0 {
|
|
||||||
sql += " AND t1m.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
|
|
||||||
sqlParams = append(sqlParams, vendorIDs)
|
|
||||||
}
|
|
||||||
if len(appOrgCodes) > 0 {
|
|
||||||
sql += " AND t1m.vendor_org_code IN (" + GenQuestionMarks(len(appOrgCodes)) + ")"
|
|
||||||
sqlParams = append(sqlParams, appOrgCodes)
|
|
||||||
}
|
|
||||||
sql += " ORDER BY t1.seq"
|
sql += " ORDER BY t1.seq"
|
||||||
|
fmt.Println(sql)
|
||||||
|
fmt.Println(sqlParams)
|
||||||
err = GetRows(db, &catList, sql, sqlParams...)
|
err = GetRows(db, &catList, sql, sqlParams...)
|
||||||
return catList, err
|
return catList, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -168,7 +168,7 @@ func getStoreDetail(db *DaoDB, storeID, vendorID int, vendorStoreID, vendorOrgCo
|
|||||||
sqlParams = append(sqlParams, vendorOrgCode)
|
sqlParams = append(sqlParams, vendorOrgCode)
|
||||||
}
|
}
|
||||||
if vendorID == model.VendorIDJDShop && vendorOrgCode == "" {
|
if vendorID == model.VendorIDJDShop && vendorOrgCode == "" {
|
||||||
sql += " AND t2.vendor_org_code = 1"
|
sql += " AND t2.vendor_org_code = 2"
|
||||||
}
|
}
|
||||||
if err = GetRow(db, &storeDetail, sql, sqlParams...); err == nil {
|
if err = GetRow(db, &storeDetail, sql, sqlParams...); err == nil {
|
||||||
storeDetail.PricePercentagePackObj = PricePercentagePack2Obj(storeDetail.PricePercentagePackStr)
|
storeDetail.PricePercentagePackObj = PricePercentagePack2Obj(storeDetail.PricePercentagePackStr)
|
||||||
@@ -1178,3 +1178,104 @@ func GetStoreAcctExpendLastCreateWayBillFee(db *DaoDB, vendorOrderID string) (la
|
|||||||
}
|
}
|
||||||
return lastFee, err
|
return lastFee, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type GetStoreManageStateResult struct {
|
||||||
|
StoreName string `json:"storeName"`
|
||||||
|
VendorStoreID string `orm:"column(vendor_store_id)" json:"vendorStoreID"`
|
||||||
|
MarketScale int `json:"marketScale"` //市场规模
|
||||||
|
Comment string `json:"comment"`
|
||||||
|
model.StoreManageState
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetStoreManageState(db *DaoDB, storeIDs, brandIDs []int, vendorID, sortType, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
|
||||||
|
var (
|
||||||
|
requestList []*GetStoreManageStateResult
|
||||||
|
GetStoreManageStateSortTypeMap = map[int]string{
|
||||||
|
1: "a.cover_area",
|
||||||
|
2: "c.market_scale",
|
||||||
|
3: "a.open_time",
|
||||||
|
4: "a.sku_count",
|
||||||
|
5: "a.high_sku_count",
|
||||||
|
6: "a.act_ample",
|
||||||
|
7: "a.null_order_count",
|
||||||
|
8: "a.refuse_order_count",
|
||||||
|
9: "a.store_score",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
sql := `
|
||||||
|
SELECT SQL_CALC_FOUND_ROWS DISTINCT a.*, b.name store_name, c.vendor_store_id, c.market_scale, b.comment
|
||||||
|
FROM store_manage_state a
|
||||||
|
LEFT JOIN store b ON b.id = a.store_id AND b.deleted_at = ?
|
||||||
|
LEFT JOIN store_map c ON c.store_id = a.store_id AND c.vendor_id = a.vendor_id AND c.deleted_at = ?
|
||||||
|
WHERE a.vendor_status <> ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
utils.DefaultTimeValue, utils.DefaultTimeValue,
|
||||||
|
model.StoreStatusDisabled,
|
||||||
|
}
|
||||||
|
if len(storeIDs) > 0 {
|
||||||
|
sql += " AND a.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||||||
|
sqlParams = append(sqlParams, storeIDs)
|
||||||
|
}
|
||||||
|
if len(brandIDs) > 0 {
|
||||||
|
sql += " AND b.brand_id IN (" + GenQuestionMarks(len(brandIDs)) + ")"
|
||||||
|
sqlParams = append(sqlParams, brandIDs)
|
||||||
|
}
|
||||||
|
if vendorID != -1 {
|
||||||
|
sql += " AND a.vendor_id = ?"
|
||||||
|
sqlParams = append(sqlParams, vendorID)
|
||||||
|
}
|
||||||
|
if sortType != 0 {
|
||||||
|
tempSortType := 0
|
||||||
|
if sortType < 0 {
|
||||||
|
tempSortType = -sortType
|
||||||
|
} else {
|
||||||
|
tempSortType = sortType
|
||||||
|
}
|
||||||
|
if GetStoreManageStateSortTypeMap[tempSortType] != "" {
|
||||||
|
sql += " ORDER BY " + GetStoreManageStateSortTypeMap[tempSortType]
|
||||||
|
if sortType < 0 {
|
||||||
|
sql += " DESC"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sql += " LIMIT ? OFFSET ?"
|
||||||
|
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||||
|
sqlParams = append(sqlParams, pageSize, offset)
|
||||||
|
Begin(db)
|
||||||
|
defer Commit(db)
|
||||||
|
if err = GetRows(db, &requestList, sql, sqlParams...); err == nil {
|
||||||
|
return &model.PagedInfo{
|
||||||
|
TotalCount: GetLastTotalRowCount(db),
|
||||||
|
Data: requestList,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
return pagedInfo, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetStoreManageStateSimple(db *DaoDB, storeIDs, brandIDs []int, vendorID int) (pagedInfo []*model.StoreManageState, err error) {
|
||||||
|
sql := `
|
||||||
|
SELECT a.*
|
||||||
|
FROM store_manage_state a
|
||||||
|
LEFT JOIN store b ON b.id = a.store_id AND b.deleted_at = ?
|
||||||
|
WHERE a.vendor_status <> ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
model.StoreStatusDisabled,
|
||||||
|
}
|
||||||
|
if len(storeIDs) > 0 {
|
||||||
|
sql += " AND a.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||||||
|
sqlParams = append(sqlParams, storeIDs)
|
||||||
|
}
|
||||||
|
if len(brandIDs) > 0 {
|
||||||
|
sql += " AND b.brand_id IN (" + GenQuestionMarks(len(brandIDs)) + ")"
|
||||||
|
sqlParams = append(sqlParams, brandIDs)
|
||||||
|
}
|
||||||
|
if vendorID != -1 {
|
||||||
|
sql += " AND a.vendor_id = ?"
|
||||||
|
sqlParams = append(sqlParams, vendorID)
|
||||||
|
}
|
||||||
|
err = GetRows(db, &pagedInfo, sql, sqlParams...)
|
||||||
|
return pagedInfo, err
|
||||||
|
}
|
||||||
|
|||||||
@@ -109,6 +109,8 @@ type StoreSkuSyncInfo struct {
|
|||||||
Img string
|
Img string
|
||||||
Img2 string
|
Img2 string
|
||||||
Img3 string
|
Img3 string
|
||||||
|
Img4 string
|
||||||
|
Img5 string
|
||||||
DescImg string
|
DescImg string
|
||||||
ImgWatermark string `json:"imgWatermark"` //图片水印
|
ImgWatermark string `json:"imgWatermark"` //图片水印
|
||||||
ImgMix string //合成水印后的图片
|
ImgMix string //合成水印后的图片
|
||||||
@@ -457,6 +459,8 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
|
|||||||
IF(t11.%s <> '', t11.%s, t3.img) img,
|
IF(t11.%s <> '', t11.%s, t3.img) img,
|
||||||
IF(t12.%s <> '', t12.%s, t3.img2) img2,
|
IF(t12.%s <> '', t12.%s, t3.img2) img2,
|
||||||
IF(t15.%s <> '', t15.%s, t3.img3) img3,
|
IF(t15.%s <> '', t15.%s, t3.img3) img3,
|
||||||
|
IF(t20.%s <> '', t20.%s, t3.img4) img4,
|
||||||
|
IF(t21.%s <> '', t21.%s, t3.img5) img5,
|
||||||
IF(t13.%s <> '', t13.%s, t3.desc_img) desc_img,
|
IF(t13.%s <> '', t13.%s, t3.desc_img) desc_img,
|
||||||
t4.%s_category_id vendor_vendor_cat_id,
|
t4.%s_category_id vendor_vendor_cat_id,
|
||||||
t4.name category_name,
|
t4.name category_name,
|
||||||
@@ -470,6 +474,8 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
|
|||||||
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
|
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
|
||||||
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
|
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
|
||||||
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
|
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
|
||||||
|
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
|
||||||
|
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
|
||||||
fieldPrefix,
|
fieldPrefix,
|
||||||
}
|
}
|
||||||
if isSingleStorePF {
|
if isSingleStorePF {
|
||||||
@@ -496,6 +502,8 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
|
|||||||
LEFT JOIN data_resource t11 ON t11.main_url = t3.img
|
LEFT JOIN data_resource t11 ON t11.main_url = t3.img
|
||||||
LEFT JOIN data_resource t12 ON t12.main_url = t3.img2
|
LEFT JOIN data_resource t12 ON t12.main_url = t3.img2
|
||||||
LEFT JOIN data_resource t15 ON t15.main_url = t3.img3
|
LEFT JOIN data_resource t15 ON t15.main_url = t3.img3
|
||||||
|
LEFT JOIN data_resource t20 ON t20.main_url = t3.img4
|
||||||
|
LEFT JOIN data_resource t21 ON t21.main_url = t3.img5
|
||||||
LEFT JOIN data_resource t13 ON t13.main_url = t3.desc_img
|
LEFT JOIN data_resource t13 ON t13.main_url = t3.desc_img
|
||||||
LEFT JOIN sku_exinfo_map tsu ON tsu.name_id = t3.id AND tsu.deleted_at = ? AND tsu.vendor_id = t14.vendor_id
|
LEFT JOIN sku_exinfo_map tsu ON tsu.name_id = t3.id AND tsu.deleted_at = ? AND tsu.vendor_id = t14.vendor_id
|
||||||
LEFT JOIN sku_vendor_category_map tsu1 ON tsu1.name_id = t3.id AND tsu1.deleted_at = ? AND tsu1.vendor_id = t14.vendor_id
|
LEFT JOIN sku_vendor_category_map tsu1 ON tsu1.name_id = t3.id AND tsu1.deleted_at = ? AND tsu1.vendor_id = t14.vendor_id
|
||||||
@@ -1812,3 +1820,32 @@ func GetStoreSkuListWithVendor(db *DaoDB, storeID, vendorID int, vendorOrgCode s
|
|||||||
err = GetRows(db, &skuList, sql, sqlParams)
|
err = GetRows(db, &skuList, sql, sqlParams)
|
||||||
return skuList, err
|
return skuList, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type GetStoresSkusForManageStateResult struct {
|
||||||
|
SkuID int `orm:"column(sku_id)"`
|
||||||
|
UnitPrice int
|
||||||
|
MidUnitPrice int
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetStoresSkusForManageState(db *DaoDB, storeID, status int) (storeSkuList []*GetStoresSkusForManageStateResult, err error) {
|
||||||
|
sql := `
|
||||||
|
SELECT t1.sku_id, t1.unit_price, t2.mid_unit_price
|
||||||
|
FROM store_sku_bind t1
|
||||||
|
LEFT JOIN price_refer_snapshot t2 ON t1.sku_id = t2.sku_id AND t2.city_code = ? AND t2.snapshot_at = ?
|
||||||
|
WHERE t1.deleted_at = ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
0, utils.Time2Date(time.Now().AddDate(0, 0, -1)),
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
}
|
||||||
|
if storeID != 0 {
|
||||||
|
sql += " AND t1.store_id = ?"
|
||||||
|
sqlParams = append(sqlParams, storeID)
|
||||||
|
}
|
||||||
|
if status != model.StoreSkuBindStatusNA {
|
||||||
|
sql += " AND t1.status = ? "
|
||||||
|
sqlParams = append(sqlParams, status)
|
||||||
|
}
|
||||||
|
err = GetRows(db, &storeSkuList, sql, sqlParams...)
|
||||||
|
return storeSkuList, err
|
||||||
|
}
|
||||||
|
|||||||
@@ -177,6 +177,9 @@ type SkuName struct {
|
|||||||
Img string `orm:"size(512)" json:"img"`
|
Img string `orm:"size(512)" json:"img"`
|
||||||
Img2 string `orm:"size(512)" json:"img2"` // 第二张图片
|
Img2 string `orm:"size(512)" json:"img2"` // 第二张图片
|
||||||
Img3 string `orm:"size(512)" json:"img3"` //第三张图片
|
Img3 string `orm:"size(512)" json:"img3"` //第三张图片
|
||||||
|
Img4 string `orm:"size(512)" json:"img4"` //第三张图片
|
||||||
|
Img5 string `orm:"size(512)" json:"img5"` //第三张图片
|
||||||
|
|
||||||
ImgWatermark string `orm:"size(512)" json:"imgWatermark"` //图片水印
|
ImgWatermark string `orm:"size(512)" json:"imgWatermark"` //图片水印
|
||||||
ImgMix string `orm:"size(512)" json:"imgMix"` //图片混合水印的图片
|
ImgMix string `orm:"size(512)" json:"imgMix"` //图片混合水印的图片
|
||||||
// ImgEbai string `orm:"size(255)" json:"imgEbai"` // 饿百图片地址
|
// ImgEbai string `orm:"size(255)" json:"imgEbai"` // 饿百图片地址
|
||||||
@@ -201,7 +204,7 @@ type SkuName struct {
|
|||||||
|
|
||||||
func (*SkuName) TableUnique() [][]string {
|
func (*SkuName) TableUnique() [][]string {
|
||||||
return [][]string{
|
return [][]string{
|
||||||
[]string{"Name", "Prefix", "SpecQuality", "SpecUnit", "Unit", "IsSpu", "DeletedAt"},
|
[]string{"Name", "Prefix", "SpecQuality", "SpecUnit", "Unit", "IsSpu", "Upc", "DeletedAt"},
|
||||||
[]string{"Upc", "DeletedAt"},
|
[]string{"Upc", "DeletedAt"},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -861,3 +861,26 @@ func (v *StoreAcct) TableIndex() [][]string {
|
|||||||
[]string{"AccountBalance"},
|
[]string{"AccountBalance"},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type StoreManageState struct {
|
||||||
|
ModelIDCUL
|
||||||
|
|
||||||
|
StoreID int `orm:"column(store_id)" json:"storeID"`
|
||||||
|
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||||||
|
CoverArea float64 `json:"coverArea"`
|
||||||
|
OpenTime float64 `json:"openTime"` //营业时长
|
||||||
|
SkuCount int `json:"skuCount"` //商品数
|
||||||
|
HighSkuCount int `json:"highSkuCount"` //虚高商品数
|
||||||
|
ActAmple int `json:"actAmple"` //活动丰富的
|
||||||
|
NullOrderCount int `json:"nullOrderCount"` //无效订单数
|
||||||
|
RefuseOrderCount int `json:"refuseOrderCount"` //拒绝订单数
|
||||||
|
StoreScore float64 `json:"storeScore"` //门店评分
|
||||||
|
RepurchaseRate int `json:"repurchaseRate"` //复购率(转化率)
|
||||||
|
VendorStatus int `json:"vendorStatus"` //平台营业状态
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *StoreManageState) TableUnique() [][]string {
|
||||||
|
return [][]string{
|
||||||
|
[]string{"StoreID", "VendorID"},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -264,6 +264,7 @@ type Menu struct {
|
|||||||
Level int `json:"level"` //级别
|
Level int `json:"level"` //级别
|
||||||
ParentID int `orm:"column(parent_id)" json:"parentID"` //父功能ID
|
ParentID int `orm:"column(parent_id)" json:"parentID"` //父功能ID
|
||||||
Color string `json:"color"` //颜色
|
Color string `json:"color"` //颜色
|
||||||
|
Type int `json:"type"` //0为功能菜单,1为权限菜单
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*Menu) TableUnique() [][]string {
|
func (*Menu) TableUnique() [][]string {
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ type IPurchasePlatformActHandler interface {
|
|||||||
// CancelAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actStoreSku []*model.ActStoreSku2) (err error)
|
// CancelAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actStoreSku []*model.ActStoreSku2) (err error)
|
||||||
|
|
||||||
SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreSkuList []*model.ActStoreSku2) (err error)
|
SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreSkuList []*model.ActStoreSku2) (err error)
|
||||||
|
|
||||||
|
//活动丰富度
|
||||||
|
GetActAmple(ctx *jxcontext.Context, vendorStoreID, vendorOrgCode string) (ample int, err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type IPurchasePlatformPageActHandler interface {
|
type IPurchasePlatformPageActHandler interface {
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ type SkuNameInfo struct {
|
|||||||
Unit string
|
Unit string
|
||||||
VendorCatIDList []string
|
VendorCatIDList []string
|
||||||
PictureList []string
|
PictureList []string
|
||||||
|
UPC string
|
||||||
Status int `json:"status,omitempty"`
|
Status int `json:"status,omitempty"`
|
||||||
YbBarCode string
|
YbBarCode string
|
||||||
SkuList []*SkuInfo
|
SkuList []*SkuInfo
|
||||||
|
|||||||
@@ -338,3 +338,12 @@ func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITa
|
|||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *PurchaseHandler) GetActAmple(ctx *jxcontext.Context, vendorStoreID, vendorOrgCode string) (ample int, err error) {
|
||||||
|
for _, v := range ebaiapi.ActivityTypeList {
|
||||||
|
if actIDs, err := api.EbaiAPI.ActMultiChannelQueryIDs("", utils.Str2Int64(vendorStoreID), v); err == nil && len(actIDs) > 0 {
|
||||||
|
ample++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ample, err
|
||||||
|
}
|
||||||
|
|||||||
@@ -231,7 +231,11 @@ func (p *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendo
|
|||||||
retVal.ID = int(utils.Str2Int64WithDefault(utils.Interface2String(result["shop_id"]), 0))
|
retVal.ID = int(utils.Str2Int64WithDefault(utils.Interface2String(result["shop_id"]), 0))
|
||||||
retVal.DeliveryRangeType = model.DeliveryRangeTypePolygon
|
retVal.DeliveryRangeType = model.DeliveryRangeTypePolygon
|
||||||
retVal.DeliveryRange = EbaiDeliveryRegion2Jx(result["delivery_region"])
|
retVal.DeliveryRange = EbaiDeliveryRegion2Jx(result["delivery_region"])
|
||||||
|
if retVal.DeliveryRange == "" {
|
||||||
|
if list, err := api.EbaiAPI.ShopDeliveryinfoGet("", utils.Str2Int64(vendorStoreID)); err == nil {
|
||||||
|
retVal.DeliveryRange = EbaiDeliveryRegion2Jx2(list[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
return retVal, nil
|
return retVal, nil
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -397,6 +401,22 @@ func EbaiDeliveryRegion2Jx(deliveryRegion interface{}) string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func EbaiDeliveryRegion2Jx2(deliveryRegion map[string]interface{}) string {
|
||||||
|
if len(deliveryRegion) > 0 {
|
||||||
|
if deliveryRegion["delivery_areas"] == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
region := deliveryRegion["delivery_areas"].([]interface{})[0].(map[string]interface{})["coordinates"].([]interface{})
|
||||||
|
coords := make([]string, len(region))
|
||||||
|
for k, v := range region {
|
||||||
|
mapV := v.(map[string]interface{})
|
||||||
|
coords[k] = fmt.Sprintf("%.6f,%.6f", utils.MustInterface2Float64(mapV["longitude"]), utils.MustInterface2Float64(mapV["latitude"]))
|
||||||
|
}
|
||||||
|
return strings.Join(coords, ";")
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
func JxDeliveryRegion2Ebai(store *model.Store) (deliveryRegion interface{}) {
|
func JxDeliveryRegion2Ebai(store *model.Store) (deliveryRegion interface{}) {
|
||||||
rangeStr := strings.Trim(store.DeliveryRange, ";")
|
rangeStr := strings.Trim(store.DeliveryRange, ";")
|
||||||
if store.DeliveryRangeType == model.DeliveryRangeTypeRadius {
|
if store.DeliveryRangeType == model.DeliveryRangeTypeRadius {
|
||||||
|
|||||||
@@ -420,6 +420,18 @@ func genSkuParamsFromStoreSkuInfo2(storeSku *dao.StoreSkuSyncInfo, isCreate, isE
|
|||||||
"url": storeSku.Img3,
|
"url": storeSku.Img3,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
if storeSku.Img4 != "" {
|
||||||
|
photos = append(photos, map[string]interface{}{
|
||||||
|
"is_master": false,
|
||||||
|
"url": storeSku.Img4,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if storeSku.Img5 != "" {
|
||||||
|
photos = append(photos, map[string]interface{}{
|
||||||
|
"is_master": false,
|
||||||
|
"url": storeSku.Img5,
|
||||||
|
})
|
||||||
|
}
|
||||||
params = map[string]interface{}{
|
params = map[string]interface{}{
|
||||||
// "name": utils.LimitMixedStringLen(storeSku.SkuName, ebaiapi.MaxSkuNameByteCount),
|
// "name": utils.LimitMixedStringLen(storeSku.SkuName, ebaiapi.MaxSkuNameByteCount),
|
||||||
"left_num": model.MaxStoreSkuStockQty,
|
"left_num": model.MaxStoreSkuStockQty,
|
||||||
@@ -598,6 +610,7 @@ func vendorSku2Jx(vendorSku *ebaiapi.SkuInfo) (skuName *partner.SkuNameInfo) {
|
|||||||
Prefix: prefix,
|
Prefix: prefix,
|
||||||
Name: name,
|
Name: name,
|
||||||
Unit: unit,
|
Unit: unit,
|
||||||
|
UPC: vendorSku.Upc,
|
||||||
SkuList: []*partner.SkuInfo{
|
SkuList: []*partner.SkuInfo{
|
||||||
&partner.SkuInfo{
|
&partner.SkuInfo{
|
||||||
StoreSkuInfo: partner.StoreSkuInfo{
|
StoreSkuInfo: partner.StoreSkuInfo{
|
||||||
|
|||||||
@@ -420,3 +420,7 @@ func getActFromJD(vendorOrgCode, promotionID string) (act *model.Act2, actStoreS
|
|||||||
}
|
}
|
||||||
return act, actStoreSkuList, err
|
return act, actStoreSkuList, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *PurchaseHandler) GetActAmple(ctx *jxcontext.Context, vendorStoreID, vendorOrgCode string) (ample int, err error) {
|
||||||
|
return ample, err
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,13 @@
|
|||||||
package jd
|
package jd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"net/url"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
@@ -84,3 +91,71 @@ func JxStoreStatus2JdStatus(status int) (yn, closeStatus int) {
|
|||||||
func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) {
|
func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) {
|
||||||
return imgHint, err
|
return imgHint, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type JdCode struct {
|
||||||
|
Code string `json:"code"`
|
||||||
|
VenderID string `json:"venderId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type JdToken struct {
|
||||||
|
Token string `json:"token"`
|
||||||
|
VenderID string `json:"venderId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func OnTokenChange(values url.Values) {
|
||||||
|
db := dao.GetDB()
|
||||||
|
codeInfo := &JdCode{}
|
||||||
|
if dataStr := values.Get("code"); dataStr != "" {
|
||||||
|
json.Unmarshal([]byte(dataStr), &codeInfo)
|
||||||
|
}
|
||||||
|
if codeInfo.Code != "" {
|
||||||
|
voc := &model.VendorOrgCode{}
|
||||||
|
sql := `
|
||||||
|
SELECT * FROM tmp_jd WHERE vendor_org_code = ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{codeInfo.VenderID}
|
||||||
|
if err := dao.GetRow(db, &voc, sql, sqlParams); err == nil && voc != nil {
|
||||||
|
if result, _ := dao.GetVendorOrgCode(db, model.VendorIDJD, codeInfo.VenderID, model.VendorOrgTypePlatform); len(result) == 0 {
|
||||||
|
voc2 := &model.VendorOrgCode{
|
||||||
|
Comment: voc.Comment,
|
||||||
|
VendorOrgCode: codeInfo.VenderID,
|
||||||
|
VendorType: model.VendorOrgTypePlatform,
|
||||||
|
}
|
||||||
|
dao.WrapAddIDCULDEntity(voc2, "jxadmin")
|
||||||
|
if err := dao.CreateEntity(db, voc2); err == nil {
|
||||||
|
//添加成功后去开发者后台填验证码
|
||||||
|
if configs, err := dao.QueryConfigs(dao.GetDB(), "jdConfigCookie", model.ConfigTypeCookie, ""); err == nil {
|
||||||
|
api.JdAPI.SetCookieWithStr(configs[0].Value)
|
||||||
|
if appID, err := api.JdAPI.GetJdNoAuthAppID(codeInfo.VenderID); err == nil {
|
||||||
|
api.JdAPI.SetCode(codeInfo.Code, appID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
globals.SugarLogger.Debugf("OnTokenChange, 发验证码,但是库里有这个账号了")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
tokenInfo := &JdToken{}
|
||||||
|
if dataStr := values.Get("token"); dataStr != "" {
|
||||||
|
json.Unmarshal([]byte(dataStr), &tokenInfo)
|
||||||
|
}
|
||||||
|
if tokenInfo == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
voc := &model.VendorOrgCode{}
|
||||||
|
sql := `
|
||||||
|
SELECT * FROM tmp_jd WHERE vendor_org_code = ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{tokenInfo.VenderID}
|
||||||
|
if err := dao.GetRow(db, &voc, sql, sqlParams); err == nil && voc != nil {
|
||||||
|
if result, _ := dao.GetVendorOrgCode(db, model.VendorIDJD, voc.VendorOrgCode, model.VendorOrgTypePlatform); len(result) > 0 {
|
||||||
|
result[0].Token = tokenInfo.Token
|
||||||
|
dao.UpdateEntity(db, result[0], "Token")
|
||||||
|
} else {
|
||||||
|
globals.SugarLogger.Debugf("OnTokenChange, 发token,但是库里没这个账号")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -172,9 +172,9 @@ func skuInfo2Param(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (param *jd
|
|||||||
param.ShopCategories = append(param.ShopCategories, utils.Str2Int64(sku.VendorCatID))
|
param.ShopCategories = append(param.ShopCategories, utils.Str2Int64(sku.VendorCatID))
|
||||||
}
|
}
|
||||||
if sku.ImgMix != "" {
|
if sku.ImgMix != "" {
|
||||||
param.Images = jxutils.BatchString2Slice(sku.ImgMix, sku.Img2, sku.Img3)
|
param.Images = jxutils.BatchString2Slice(sku.ImgMix, sku.Img2, sku.Img3, sku.Img4, sku.Img5)
|
||||||
} else {
|
} else {
|
||||||
param.Images = jxutils.BatchString2Slice(sku.Img, sku.Img2, sku.Img3)
|
param.Images = jxutils.BatchString2Slice(sku.Img, sku.Img2, sku.Img3, sku.Img4, sku.Img5)
|
||||||
}
|
}
|
||||||
|
|
||||||
if param.CategoryID == 0 {
|
if param.CategoryID == 0 {
|
||||||
|
|||||||
@@ -9,3 +9,7 @@ import (
|
|||||||
func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreSkuList []*model.ActStoreSku2) (err error) {
|
func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreSkuList []*model.ActStoreSku2) (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *PurchaseHandler) GetActAmple(ctx *jxcontext.Context, vendorStoreID, vendorOrgCode string) (ample int, err error) {
|
||||||
|
return ample, err
|
||||||
|
}
|
||||||
|
|||||||
@@ -262,6 +262,9 @@ func result2Orders(msg *jdshopapi.CallBackResult) (order *model.GoodsOrder, err
|
|||||||
} else {
|
} else {
|
||||||
order.ExpectedDeliveredTime = utils.Str2Time(time2)
|
order.ExpectedDeliveredTime = utils.Str2Time(time2)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
order.ExpectedDeliveredTime = order.OrderCreatedAt.Add(time.Hour)
|
||||||
|
err = nil
|
||||||
}
|
}
|
||||||
order.PickDeadline = order.ExpectedDeliveredTime.Add(-time.Hour)
|
order.PickDeadline = order.ExpectedDeliveredTime.Add(-time.Hour)
|
||||||
} else if msg.OrderState == jdshopapi.OrderStatusWait || msg.OrderState == "WAIT_GOODS_RECEIVE_CONFIRM" || msg.OrderState == "FINISHED_L" {
|
} else if msg.OrderState == jdshopapi.OrderStatusWait || msg.OrderState == "WAIT_GOODS_RECEIVE_CONFIRM" || msg.OrderState == "FINISHED_L" {
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ func getAPI(appOrgCode string) (apiObj *jdshopapi.API) {
|
|||||||
apiObj.SetCookieWithStr(configs[0].Value)
|
apiObj.SetCookieWithStr(configs[0].Value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return
|
return apiObj
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) GetVendorID() int {
|
func (p *PurchaseHandler) GetVendorID() int {
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ func (p *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bo
|
|||||||
if status == model.OrderStatusCanceled {
|
if status == model.OrderStatusCanceled {
|
||||||
err = ChangeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, "订单在京东商城已被取消!")
|
err = ChangeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, "订单在京东商城已被取消!")
|
||||||
} else {
|
} else {
|
||||||
if jxutils.GetSaleStoreIDFromOrder(order) != model.JdShopMainStoreID {
|
if jxutils.GetSaleStoreIDFromOrder(order) != model.JdShopMainStoreID && jxutils.GetSaleStoreIDFromOrder(order) != model.JdShopMainStoreID2 {
|
||||||
err = ChangeOrderStatus(order.VendorOrderID, model.OrderStatusFinishedPickup, "自动拣货完成")
|
err = ChangeOrderStatus(order.VendorOrderID, model.OrderStatusFinishedPickup, "自动拣货完成")
|
||||||
if status == model.OrderStatusAccepted {
|
if status == model.OrderStatusAccepted {
|
||||||
err = p.OrderExport(jxcontext.AdminCtx, order.VendorOrderID, order.VendorOrderID, true)
|
err = p.OrderExport(jxcontext.AdminCtx, order.VendorOrderID, order.VendorOrderID, true)
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName stri
|
|||||||
url, _ := getAPI("2").UploadImageNew(data, "2659335b16e3880e367759b8fc675933.tem.png")
|
url, _ := getAPI("2").UploadImageNew(data, "2659335b16e3880e367759b8fc675933.tem.png")
|
||||||
ex := store.LicenceExpire
|
ex := store.LicenceExpire
|
||||||
if ex == "" {
|
if ex == "" {
|
||||||
ex = utils.Time2Str(utils.Str2Time(store.LicenceValid).AddDate(0, 6, 0))
|
ex = utils.Time2Str(utils.Str2Time(store.LicenceValid).AddDate(20, 0, 0))
|
||||||
}
|
}
|
||||||
if !strings.Contains(ex, "00:00:00") {
|
if !strings.Contains(ex, "00:00:00") {
|
||||||
ex += " 00:00:00"
|
ex += " 00:00:00"
|
||||||
@@ -146,6 +146,37 @@ func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName stri
|
|||||||
AddCode3: store.JdsCode,
|
AddCode3: store.JdsCode,
|
||||||
CategoryID1: 3,
|
CategoryID1: 3,
|
||||||
}
|
}
|
||||||
|
var (
|
||||||
|
url3 string
|
||||||
|
idCode string
|
||||||
|
startTime string
|
||||||
|
)
|
||||||
|
if storeDetail.IDCardFront != "" {
|
||||||
|
data2, _, _ := jxutils.DownloadFileByURL(storeDetail.IDCardFront)
|
||||||
|
fileName := storeDetail.IDCardFront[strings.LastIndex(storeDetail.IDCardFront, "/")+1 : len(storeDetail.IDCardFront)]
|
||||||
|
url3, _ = api.JdShop2API.UploadImageNew(data2, fileName)
|
||||||
|
} else {
|
||||||
|
data2, _, _ := jxutils.DownloadFileByURL("http://image.jxc4.com/image/a9bfc170a950ab9a4c76bd10b48b222b.tem.jpg")
|
||||||
|
fileName := "a9bfc170a950ab9a4c76bd10b48b222b.tem.jpg"
|
||||||
|
url3, _ = api.JdShop2API.UploadImageNew(data2, fileName)
|
||||||
|
}
|
||||||
|
if storeDetail.IDCode == "" {
|
||||||
|
idCode = "610126198012230014"
|
||||||
|
} else {
|
||||||
|
idCode = storeDetail.IDCode
|
||||||
|
}
|
||||||
|
if storeDetail.IDValid == "" {
|
||||||
|
startTime = "2013-01-25 00:00:00"
|
||||||
|
} else {
|
||||||
|
startTime = utils.Time2Str(utils.Str2Time(storeDetail.IDValid))
|
||||||
|
}
|
||||||
|
ex2 := storeDetail.IDExpire
|
||||||
|
if ex2 == "" {
|
||||||
|
ex2 = utils.Time2Str(utils.Str2Time(storeDetail.IDValid).AddDate(20, 0, 0))
|
||||||
|
}
|
||||||
|
if !strings.Contains(ex2, "00:00:00") {
|
||||||
|
ex2 += " 00:00:00"
|
||||||
|
}
|
||||||
if url2 != "" {
|
if url2 != "" {
|
||||||
param.CategoryID1 = 34
|
param.CategoryID1 = 34
|
||||||
param.CategoryID2 = 62
|
param.CategoryID2 = 62
|
||||||
@@ -159,6 +190,15 @@ func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName stri
|
|||||||
EndingTime: ex,
|
EndingTime: ex,
|
||||||
Time: []string{utils.Time2Str(utils.Str2Time(store.LicenceValid)), ex},
|
Time: []string{utils.Time2Str(utils.Str2Time(store.LicenceValid)), ex},
|
||||||
},
|
},
|
||||||
|
&jdshopapi.QualificationRequests{
|
||||||
|
QualificationID: 42,
|
||||||
|
QualificationName: "身份证件",
|
||||||
|
QualificationNo: idCode,
|
||||||
|
QualificationURL: url3,
|
||||||
|
StartTime: startTime,
|
||||||
|
EndingTime: ex2,
|
||||||
|
Time: []string{startTime, ex2},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if store.JdsStreetCode != 0 {
|
if store.JdsStreetCode != 0 {
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import (
|
|||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/globals/api"
|
"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/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
"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/jxcontext"
|
||||||
@@ -123,6 +122,9 @@ func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, v
|
|||||||
}
|
}
|
||||||
if v.VendorOrgCode == "1" {
|
if v.VendorOrgCode == "1" {
|
||||||
vendorSkuID, err := getAPI(v.VendorOrgCode).UpdateSkus(updateSkusParam)
|
vendorSkuID, err := getAPI(v.VendorOrgCode).UpdateSkus(updateSkusParam)
|
||||||
|
if strings.Contains(err.Error(), "cookie可能过期了") {
|
||||||
|
err = nil
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "创建商品")
|
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "创建商品")
|
||||||
return failedList, err
|
return failedList, err
|
||||||
@@ -157,6 +159,9 @@ func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, v
|
|||||||
if v.VendorOrgCode == "1" {
|
if v.VendorOrgCode == "1" {
|
||||||
createSkuResult, err2 := getAPI(v.VendorOrgCode).CreateWare(createSkuParamWare, createSkuParamSkus)
|
createSkuResult, err2 := getAPI(v.VendorOrgCode).CreateWare(createSkuParamWare, createSkuParamSkus)
|
||||||
err = err2
|
err = err2
|
||||||
|
if strings.Contains(err.Error(), "cookie可能过期了") {
|
||||||
|
err = nil
|
||||||
|
}
|
||||||
wareID = createSkuResult.WareID
|
wareID = createSkuResult.WareID
|
||||||
|
|
||||||
var paramAttrs = make(map[string]*jdshopapi.CreateSkuParamSkus)
|
var paramAttrs = make(map[string]*jdshopapi.CreateSkuParamSkus)
|
||||||
@@ -478,17 +483,29 @@ func (p *PurchaseHandler) GetStoreSkusFullInfo(ctx *jxcontext.Context, parentTas
|
|||||||
pageNo = 1
|
pageNo = 1
|
||||||
pageSize = 20
|
pageSize = 20
|
||||||
)
|
)
|
||||||
_, totalCount, err := api.JdShopAPI.SearchSkuList(pageNo, pageSize)
|
if result, totalCount, err := api.JdShop2API.StoreProductSearch(pageNo, pageSize, []string{vendorStoreID}); err == nil && result != nil {
|
||||||
for ; pageNo <= totalCount/pageSize+1; pageNo++ {
|
for ; pageNo <= totalCount/pageSize+1; pageNo++ {
|
||||||
result, _, err := api.JdShopAPI.SearchSkuList(pageNo, pageSize)
|
result2, _, err := api.JdShop2API.StoreProductSearch(pageNo, pageSize, []string{vendorStoreID})
|
||||||
if err == nil {
|
if err == nil {
|
||||||
for _, v := range result {
|
for _, v := range result2 {
|
||||||
if skuName := vendorSku2Jx(v); skuName != nil {
|
if skuName := vendorSku2Jx2(v); skuName != nil {
|
||||||
skuNameList = append(skuNameList, skuName)
|
skuNameList = append(skuNameList, skuName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
// _, totalCount, err := api.JdShopAPI.SearchSkuList(pageNo, pageSize)
|
||||||
|
// for ; pageNo <= totalCount/pageSize+1; pageNo++ {
|
||||||
|
// result, _, err := api.JdShopAPI.SearchSkuList(pageNo, pageSize)
|
||||||
|
// if err == nil {
|
||||||
|
// for _, v := range result {
|
||||||
|
// if skuName := vendorSku2Jx(v); skuName != nil {
|
||||||
|
// skuNameList = append(skuNameList, skuName)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
return skuNameList, err
|
return skuNameList, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -688,17 +705,6 @@ func (p *PurchaseHandler) IsErrSkuNotExist(err error) (isNotExist bool) {
|
|||||||
return false
|
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.SearchSkuListResult) (skuName *partner.SkuNameInfo) {
|
func vendorSku2Jx(result *jdshopapi.SearchSkuListResult) (skuName *partner.SkuNameInfo) {
|
||||||
if result == nil {
|
if result == nil {
|
||||||
globals.SugarLogger.Warnf("vendorSku2Jx, strange result:%s", utils.Format4Output(result, true))
|
globals.SugarLogger.Warnf("vendorSku2Jx, strange result:%s", utils.Format4Output(result, true))
|
||||||
@@ -722,6 +728,27 @@ func vendorSku2Jx(result *jdshopapi.SearchSkuListResult) (skuName *partner.SkuNa
|
|||||||
return skuName
|
return skuName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func vendorSku2Jx2(result *jdshopapi.StoreProductSearchResult) (skuName *partner.SkuNameInfo) {
|
||||||
|
if result == nil {
|
||||||
|
globals.SugarLogger.Warnf("vendorSku2Jx, strange result:%s", utils.Format4Output(result, true))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
skuName = &partner.SkuNameInfo{
|
||||||
|
Name: result.SkuName,
|
||||||
|
SkuList: []*partner.SkuInfo{
|
||||||
|
&partner.SkuInfo{
|
||||||
|
StoreSkuInfo: partner.StoreSkuInfo{
|
||||||
|
VendorSkuID: utils.Int64ToStr(result.SkuID),
|
||||||
|
Stock: result.StockNum,
|
||||||
|
VendorPrice: jxutils.StandardPrice2Int(result.StorePrice),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Status: result.Status,
|
||||||
|
}
|
||||||
|
return skuName
|
||||||
|
}
|
||||||
|
|
||||||
func updateOrCreateCategories(storeCat *dao.SkuStoreCatInfo, isCreate bool) (status int64, err error) {
|
func updateOrCreateCategories(storeCat *dao.SkuStoreCatInfo, isCreate bool) (status int64, err error) {
|
||||||
var createShopCategoryParams []*jdshopapi.CreateShopCategoryParam
|
var createShopCategoryParams []*jdshopapi.CreateShopCategoryParam
|
||||||
result, err := getAPI(storeCat.VendorOrgCode).FindShopCategories()
|
result, err := getAPI(storeCat.VendorOrgCode).FindShopCategories()
|
||||||
|
|||||||
@@ -258,3 +258,13 @@ func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITa
|
|||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *PurchaseHandler) GetActAmple(ctx *jxcontext.Context, vendorStoreID, vendorOrgCode string) (ample int, err error) {
|
||||||
|
for _, v := range mtwmapi.ActTypeList {
|
||||||
|
//1表示进行中
|
||||||
|
if actList, err := getAPI(vendorOrgCode, 0, vendorStoreID).GetByAppPoiCodeAndType(vendorOrgCode, 1, v); err == nil {
|
||||||
|
ample += len(actList)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ample, err
|
||||||
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ var (
|
|||||||
"589": map[string]string{
|
"589": map[string]string{
|
||||||
"firstTag": mtwmapi.MtwmC4Tag, //经营品类
|
"firstTag": mtwmapi.MtwmC4Tag, //经营品类
|
||||||
"settlementID": "7030017", //结算ID
|
"settlementID": "7030017", //结算ID
|
||||||
"poiCert": "1,5", //资质列表
|
"poiCert": "1,2,5", //资质列表
|
||||||
},
|
},
|
||||||
"5873": map[string]string{
|
"5873": map[string]string{
|
||||||
"firstTag": mtwmapi.MtwmSCTag,
|
"firstTag": mtwmapi.MtwmSCTag,
|
||||||
@@ -62,7 +62,7 @@ type tEbaiStoreInfo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID string) (retVal *dao.StoreDetail, err error) {
|
func (p *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID string) (retVal *dao.StoreDetail, err error) {
|
||||||
result, err := getAPI(vendorOrgCode, 0, vendorStoreID).PoiGet(vendorStoreID)
|
result, err := getAPIWithoutToken(vendorOrgCode).PoiGet(vendorStoreID)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
// globals.SugarLogger.Debug(utils.Format4Output(result, false))
|
// globals.SugarLogger.Debug(utils.Format4Output(result, false))
|
||||||
retVal = &dao.StoreDetail{
|
retVal = &dao.StoreDetail{
|
||||||
@@ -98,9 +98,9 @@ func (p *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendo
|
|||||||
retVal.ID = int(utils.Str2Int64WithDefault(poiCode, 0))
|
retVal.ID = int(utils.Str2Int64WithDefault(poiCode, 0))
|
||||||
retVal.DeliveryRangeType = model.DeliveryRangeTypePolygon
|
retVal.DeliveryRangeType = model.DeliveryRangeTypePolygon
|
||||||
var deliveryRangeInfo []map[string]interface{}
|
var deliveryRangeInfo []map[string]interface{}
|
||||||
deliveryRangeInfo, err = getAPI(vendorOrgCode, 0, vendorStoreID).ShippingFetch(poiCode)
|
deliveryRangeInfo, err = getAPIWithoutToken(vendorOrgCode).ShippingFetch(poiCode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
deliveryRangeInfo, err = getAPI(vendorOrgCode, 0, vendorStoreID).ShippingList(poiCode)
|
deliveryRangeInfo, err = getAPIWithoutToken(vendorOrgCode).ShippingList(poiCode)
|
||||||
}
|
}
|
||||||
if err == nil {
|
if err == nil {
|
||||||
if len(deliveryRangeInfo) > 0 {
|
if len(deliveryRangeInfo) > 0 {
|
||||||
@@ -144,7 +144,7 @@ func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName stri
|
|||||||
}
|
}
|
||||||
vendorInfoMap := storeVendorOrgCodeMap[vendorOrgCode]
|
vendorInfoMap := storeVendorOrgCodeMap[vendorOrgCode]
|
||||||
poiSettleSaveParam := &mtwmapi.PoiSettleSaveParam{
|
poiSettleSaveParam := &mtwmapi.PoiSettleSaveParam{
|
||||||
Type: 0, //创建
|
Type: 1, //创建
|
||||||
ApplyInfos: []*mtwmapi.ApplyInfo{
|
ApplyInfos: []*mtwmapi.ApplyInfo{
|
||||||
&mtwmapi.ApplyInfo{
|
&mtwmapi.ApplyInfo{
|
||||||
AppPoiCode: utils.Int2Str(storeDetail.ID),
|
AppPoiCode: utils.Int2Str(storeDetail.ID),
|
||||||
|
|||||||
@@ -286,13 +286,25 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
foodData["is_sold_out"] = skuStatusJX2Mtwm(storeSku.MergedStatus)
|
foodData["is_sold_out"] = skuStatusJX2Mtwm(storeSku.MergedStatus)
|
||||||
if true { // vendorStoreID == specialStoreID {
|
if true { // vendorStoreID == specialStoreID {
|
||||||
img2 := storeSku.Img2
|
img2 := storeSku.Img2
|
||||||
|
img3 := storeSku.Img3
|
||||||
|
img4 := storeSku.Img4
|
||||||
|
img5 := storeSku.Img5
|
||||||
if img2 == "" {
|
if img2 == "" {
|
||||||
img2 = storeSku.Img
|
img2 = storeSku.Img
|
||||||
}
|
}
|
||||||
|
if img3 == "" {
|
||||||
|
img3 = storeSku.Img
|
||||||
|
}
|
||||||
|
if img4 == "" {
|
||||||
|
img4 = storeSku.Img
|
||||||
|
}
|
||||||
|
if img5 == "" {
|
||||||
|
img5 = storeSku.Img
|
||||||
|
}
|
||||||
if storeSku.ImgMix != "" && ((storeSku.BrandID == storeSku.ExBrandID && storeSku.ExBrandID != 0) || storeSku.ExBrandID == 0) {
|
if storeSku.ImgMix != "" && ((storeSku.BrandID == storeSku.ExBrandID && storeSku.ExBrandID != 0) || storeSku.ExBrandID == 0) {
|
||||||
foodData["picture"] = strings.Join(jxutils.BatchString2Slice(storeSku.ImgMix, img2, storeSku.ImgMix, storeSku.ImgMix, storeSku.ImgMix), ",")
|
foodData["picture"] = strings.Join(jxutils.BatchString2Slice(storeSku.ImgMix, img2, img3, img4, img5), ",")
|
||||||
} else {
|
} else {
|
||||||
foodData["picture"] = strings.Join(jxutils.BatchString2Slice(storeSku.Img, img2, storeSku.Img, storeSku.Img, storeSku.Img), ",")
|
foodData["picture"] = strings.Join(jxutils.BatchString2Slice(storeSku.Img, img2, img3, img4, img5), ",")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foodData["picture"] = strings.Join(jxutils.BatchString2Slice(storeSku.Img, storeSku.Img2), ",")
|
foodData["picture"] = strings.Join(jxutils.BatchString2Slice(storeSku.Img, storeSku.Img2), ",")
|
||||||
@@ -554,7 +566,7 @@ func vendorSku2Jx(appFood *mtwmapi.AppFood) (skuName *partner.SkuNameInfo) {
|
|||||||
skuName = &partner.SkuNameInfo{
|
skuName = &partner.SkuNameInfo{
|
||||||
NameID: int(utils.Str2Int64WithDefault(appFood.AppFoodCode, 0)),
|
NameID: int(utils.Str2Int64WithDefault(appFood.AppFoodCode, 0)),
|
||||||
VendorNameID: appFood.AppFoodCode,
|
VendorNameID: appFood.AppFoodCode,
|
||||||
|
UPC: appFood.SkuList[0].Upc,
|
||||||
Prefix: prefix,
|
Prefix: prefix,
|
||||||
Name: name,
|
Name: name,
|
||||||
Unit: unit,
|
Unit: unit,
|
||||||
|
|||||||
@@ -9,3 +9,7 @@ import (
|
|||||||
func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreSkuList []*model.ActStoreSku2) (err error) {
|
func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreSkuList []*model.ActStoreSku2) (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *PurchaseHandler) GetActAmple(ctx *jxcontext.Context, vendorStoreID, vendorOrgCode string) (ample int, err error) {
|
||||||
|
return ample, err
|
||||||
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/weixinapi"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/auth2"
|
"git.rosy.net.cn/jx-callback/business/auth2"
|
||||||
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/dingding"
|
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/dingding"
|
||||||
@@ -13,6 +14,7 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/password"
|
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/password"
|
||||||
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin"
|
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
"github.com/astaxie/beego"
|
"github.com/astaxie/beego"
|
||||||
)
|
)
|
||||||
@@ -322,3 +324,44 @@ func (c *Auth2Controller) DeletedTokenInfoWithoutParam() {
|
|||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type UserInfoWithWeixin struct {
|
||||||
|
Mobile string `json:"mobile"`
|
||||||
|
IsExist bool `json:"isExist"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Title 根据小程序jsCode查询用户信息
|
||||||
|
// @Description 根据小程序jsCode查询用户信息
|
||||||
|
// @Param token header string false "认证token"
|
||||||
|
// @Param data formData string true "加密数据"
|
||||||
|
// @Param iv formData string true "iv"
|
||||||
|
// @Param jsCode formData string false "小程序jsCode"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /GetUserByMiniInfo [post]
|
||||||
|
func (c *Auth2Controller) GetUserByMiniInfo() {
|
||||||
|
c.callGetUserByMiniInfo(func(params *tAuth2GetUserByMiniInfoParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
authInfo := &auth2.AuthInfo{}
|
||||||
|
if err == nil {
|
||||||
|
decryptedDataBase64, err2 := weixin.AutherObjMini.DecryptData(authInfo, GetComposedCode(&c.Controller, params.JsCode), params.Data, params.Iv)
|
||||||
|
if err = err2; err == nil {
|
||||||
|
var userInfo *weixinapi.MiniUserInfo
|
||||||
|
if err = utils.UnmarshalUseNumber([]byte(decryptedDataBase64), &userInfo); err == nil {
|
||||||
|
result := &UserInfoWithWeixin{}
|
||||||
|
result.Mobile = userInfo.PhoneNumber
|
||||||
|
if userInfo.PhoneNumber != "" {
|
||||||
|
if user, err := dao.GetUserByID(dao.GetDB(), "mobile", userInfo.PhoneNumber); err == nil {
|
||||||
|
if user != nil {
|
||||||
|
result.IsExist = true
|
||||||
|
} else {
|
||||||
|
result.IsExist = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
retVal = result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -683,3 +683,15 @@ func (c *SkuController) LoadStoreVendorCategories() {
|
|||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Title 刷新没图的商品
|
||||||
|
// @Description 刷新没图的商品
|
||||||
|
// @Param token header string true "认证token"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /RefreshNoImgSku [post]
|
||||||
|
func (c *SkuController) RefreshNoImgSku() {
|
||||||
|
c.callRefreshNoImgSku(func(params *tSkuRefreshNoImgSkuParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ func (c *StoreSkuController) GetStoreSkus() {
|
|||||||
// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)"
|
// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)"
|
||||||
// @Param nameIDs query string false "SkuName ID列表对象"
|
// @Param nameIDs query string false "SkuName ID列表对象"
|
||||||
// @Param skuIDs query string false "Sku ID列表对象"
|
// @Param skuIDs query string false "Sku ID列表对象"
|
||||||
|
// @Param upcs query string false "upc列表对象"
|
||||||
// @Param name query string false "商品名称(不要求完全一致)"
|
// @Param name query string false "商品名称(不要求完全一致)"
|
||||||
// @Param prefix query string false "商品前缀(不要求完全一致)"
|
// @Param prefix query string false "商品前缀(不要求完全一致)"
|
||||||
// @Param categoryID query int false "商品所属类别ID"
|
// @Param categoryID query int false "商品所属类别ID"
|
||||||
@@ -99,8 +100,9 @@ func (c *StoreSkuController) GetStoreSkus() {
|
|||||||
func (c *StoreSkuController) GetStoresSkus() {
|
func (c *StoreSkuController) GetStoresSkus() {
|
||||||
c.callGetStoresSkus(func(params *tStoreSkuGetStoresSkusParams) (retVal interface{}, errCode string, err error) {
|
c.callGetStoresSkus(func(params *tStoreSkuGetStoresSkusParams) (retVal interface{}, errCode string, err error) {
|
||||||
var storeIDs, skuIDs []int
|
var storeIDs, skuIDs []int
|
||||||
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.SkuIDs, &skuIDs); err == nil {
|
var upcs []string
|
||||||
retVal, err = cms.GetStoresSkus(params.Ctx, storeIDs, skuIDs, params.IsFocus, params.IsHighPrice, params.PriceType, params.Keyword, params.IsBySku, params.IsAct, params.MapData, params.Offset, params.PageSize)
|
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.SkuIDs, &skuIDs, params.Upcs, &upcs); err == nil {
|
||||||
|
retVal, err = cms.GetStoresSkus(params.Ctx, storeIDs, skuIDs, upcs, params.IsFocus, params.IsHighPrice, params.PriceType, params.Keyword, params.IsBySku, params.IsAct, params.MapData, params.Offset, params.PageSize)
|
||||||
}
|
}
|
||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
@@ -923,3 +925,39 @@ func (c *StoreSkuController) GetSpecialtyStoreSkus() {
|
|||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Title 拉取平台标品
|
||||||
|
// @Description 拉取平台标品
|
||||||
|
// @Param token header string true "认证token"
|
||||||
|
// @Param vendorID formData int true "平台id"
|
||||||
|
// @Param storeID formData int true "门店ID"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /GetVendorStoreSkus [post]
|
||||||
|
func (c *StoreSkuController) GetVendorStoreSkus() {
|
||||||
|
c.callGetVendorStoreSkus(func(params *tStoreSkuGetVendorStoreSkusParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
err = cms.GetVendorStoreSkus(params.Ctx, params.StoreID, params.VendorID)
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Title 得到商家商品信息
|
||||||
|
// @Description 得到商家商品信息,如下条件之间是与的关系。对于没有认领的商品,按城市限制。但对于已经认领的商品就不限制了,因为已经在平台上可售,可以操作(改价等等)
|
||||||
|
// @Param token header string false "认证token"
|
||||||
|
// @Param storeID query int true "门店ID"
|
||||||
|
// @Param isFocus query bool true "是否已关注(认领)"
|
||||||
|
// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)"
|
||||||
|
// @Param categoryID query int false "商品所属类别ID"
|
||||||
|
// @Param status query int false "查询起始状态(0:不可售,1:可售,-1 全部)"
|
||||||
|
// @Param offset query int false "门店列表起始序号(以0开始,缺省为0)"
|
||||||
|
// @Param pageSize query int false "门店列表页大小(缺省为50,-1表示全部)"
|
||||||
|
// @Param isAct query bool false "是否活动商品(包括正常活动与补贴)"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /GetStoresSkusForStore [get]
|
||||||
|
func (c *StoreSkuController) GetStoresSkusForStore() {
|
||||||
|
c.callGetStoresSkusForStore(func(params *tStoreSkuGetStoresSkusForStoreParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
retVal, err = cms.GetStoresSkusForStore(params.Ctx, params.StoreID, params.IsFocus, params.IsAct, params.Keyword, params.CategoryID, params.Status, params.Offset, params.PageSize)
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ func (c *DjswController) Token() {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
globals.SugarLogger.Info(utils.Format4Output(utils.URLValues2Map(urlValues), false))
|
globals.SugarLogger.Info(utils.Format4Output(utils.URLValues2Map(urlValues), false))
|
||||||
}
|
}
|
||||||
|
jd.OnTokenChange(urlValues)
|
||||||
c.Data["json"] = c.transferResponse("Token", nil)
|
c.Data["json"] = c.transferResponse("Token", nil)
|
||||||
c.ServeJSON()
|
c.ServeJSON()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ type ReportController struct {
|
|||||||
// @Title 查询订单统计信息
|
// @Title 查询订单统计信息
|
||||||
// @Description 根据门店idlist和时间范围查询
|
// @Description 根据门店idlist和时间范围查询
|
||||||
// @Param token header string true "认证token"
|
// @Param token header string true "认证token"
|
||||||
// @Param storeIDs formData string true "京西门店ID列表[1,2,3]"
|
// @Param storeIDs formData string false "京西门店ID列表[1,2,3]"
|
||||||
|
// @Param vendorIDs formData string false "平台ID列表[1,2,3]"
|
||||||
// @Param fromDate formData string true "开始日期(包含),格式(2006-01-02 00:00:00)"
|
// @Param fromDate formData string true "开始日期(包含),格式(2006-01-02 00:00:00)"
|
||||||
// @Param toDate formData string true "结束日期(包含),格式(2006-01-02 00:00:00)"
|
// @Param toDate formData string true "结束日期(包含),格式(2006-01-02 00:00:00)"
|
||||||
// @Success 200 {object} controllers.CallResult
|
// @Success 200 {object} controllers.CallResult
|
||||||
@@ -23,9 +24,9 @@ type ReportController struct {
|
|||||||
// @router /StatisticsReportForOrders [post]
|
// @router /StatisticsReportForOrders [post]
|
||||||
func (c *ReportController) StatisticsReportForOrders() {
|
func (c *ReportController) StatisticsReportForOrders() {
|
||||||
c.callStatisticsReportForOrders(func(params *tReportStatisticsReportForOrdersParams) (retVal interface{}, errCode string, err error) {
|
c.callStatisticsReportForOrders(func(params *tReportStatisticsReportForOrdersParams) (retVal interface{}, errCode string, err error) {
|
||||||
var storeIDList []int
|
var storeIDList, vendorIDs []int
|
||||||
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDList); err == nil {
|
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDList, params.VendorIDs, &vendorIDs); err == nil {
|
||||||
retVal, err = report.GetStatisticsReportForOrders(params.Ctx, storeIDList, params.FromDate, params.ToDate)
|
retVal, err = report.GetStatisticsReportForOrders(params.Ctx, storeIDList, vendorIDs, params.FromDate, params.ToDate)
|
||||||
}
|
}
|
||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
@@ -114,3 +115,25 @@ func (c *ReportController) GetManageState() {
|
|||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Title 查询门店经营数据
|
||||||
|
// @Description 查询门店经营数据
|
||||||
|
// @Param token header string true "认证token"
|
||||||
|
// @Param storeIDs query string false "门店ID列表[1,2,3]"
|
||||||
|
// @Param brandIDs query string false "品牌ID列表[1,2,3]"
|
||||||
|
// @Param vendorID query int true "平台ID"
|
||||||
|
// @Param sortType query int false "排序类型,1 覆盖范围,2市场规模,3营业时长,4商品数,5虚高商品数,6活动丰富度,7无效订单数,8拒绝订单数,9门店评分,正升序,负倒序"
|
||||||
|
// @Param offset query int false "门店列表起始序号(以0开始,缺省为0)"
|
||||||
|
// @Param pageSize query int false "门店列表页大小(缺省为50,-1表示全部)"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /GetStoreManageState [get]
|
||||||
|
func (c *ReportController) GetStoreManageState() {
|
||||||
|
c.callGetStoreManageState(func(params *tReportGetStoreManageStateParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
var storeIDs, brandIDs []int
|
||||||
|
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.BrandIDs, &brandIDs); err == nil {
|
||||||
|
retVal, err = report.GetStoreManageState(params.Ctx, storeIDs, brandIDs, params.VendorID, params.SortType, params.Offset, params.PageSize)
|
||||||
|
}
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -161,3 +161,20 @@ func (c *SysController) UpdateVendorOrgCode() {
|
|||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Title 添加平台账号信息
|
||||||
|
// @Description 添加平台账号信息
|
||||||
|
// @Param token header string true "token"
|
||||||
|
// @Param payload formData string true "json数据,vendorOrgCode对象()"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /AddVendorOrgCode [post]
|
||||||
|
func (c *SysController) AddVendorOrgCode() {
|
||||||
|
c.callAddVendorOrgCode(func(params *tSysAddVendorOrgCodeParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
vendorOrgCode := &model.VendorOrgCode{}
|
||||||
|
if err = utils.UnmarshalUseNumber([]byte(params.Payload), &vendorOrgCode); err == nil {
|
||||||
|
err = common.AddVendorOrgCode(params.Ctx, vendorOrgCode)
|
||||||
|
}
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -50,6 +50,10 @@ func (a *APIManager) GetAPI(vendorID int, appOrgCode string) (pfAPI interface{})
|
|||||||
JdStorePageCookie := configs[0].Value
|
JdStorePageCookie := configs[0].Value
|
||||||
api.JdAPI.SetJdCookie(JdStorePageCookie)
|
api.JdAPI.SetJdCookie(JdStorePageCookie)
|
||||||
}
|
}
|
||||||
|
if configs, err := dao.QueryConfigs(dao.GetDB(), "jdStorePageEarning", model.ConfigTypeCookie, ""); err == nil {
|
||||||
|
jdStorePageEarning := configs[0].Value
|
||||||
|
api.JdAPI.SetCookie("user", jdStorePageEarning)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case model.VendorIDMTWM:
|
case model.VendorIDMTWM:
|
||||||
pfAPI = api.MtwmAPI
|
pfAPI = api.MtwmAPI
|
||||||
@@ -72,7 +76,10 @@ func (a *APIManager) GetAPI(vendorID int, appOrgCode string) (pfAPI interface{})
|
|||||||
func (a *APIManager) GetAppOrgCodeList(vendorID int) (appOrgCodeList []string) {
|
func (a *APIManager) GetAppOrgCodeList(vendorID int) (appOrgCodeList []string) {
|
||||||
switch vendorID {
|
switch vendorID {
|
||||||
case model.VendorIDJD:
|
case model.VendorIDJD:
|
||||||
appOrgCodeList = jxutils.BatchString2Slice(globals.JdOrgCode, globals.Jd2OrgCode, globals.Jd3OrgCode, globals.JdcsOrgCode, globals.JdydOrgCode)
|
vendorOrgCodes, _ := dao.GetVendorOrgCode(dao.GetDB(), model.VendorIDJD, "", model.VendorOrgTypePlatform)
|
||||||
|
for _, v := range vendorOrgCodes {
|
||||||
|
appOrgCodeList = append(appOrgCodeList, v.VendorOrgCode)
|
||||||
|
}
|
||||||
case model.VendorIDMTWM:
|
case model.VendorIDMTWM:
|
||||||
appOrgCodeList = []string{api.MtwmAPI.GetAppID(), api.Mtwm2API.GetAppID()}
|
appOrgCodeList = []string{api.MtwmAPI.GetAppID(), api.Mtwm2API.GetAppID()}
|
||||||
case model.VendorIDEBAI:
|
case model.VendorIDEBAI:
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ func Init() {
|
|||||||
orm.RegisterModel(&model.PageShop{})
|
orm.RegisterModel(&model.PageShop{})
|
||||||
orm.RegisterModel(&model.VendorStoreSnapshot{})
|
orm.RegisterModel(&model.VendorStoreSnapshot{})
|
||||||
orm.RegisterModel(&model.PriceReferSnapshot{})
|
orm.RegisterModel(&model.PriceReferSnapshot{})
|
||||||
|
orm.RegisterModel(&model.StoreManageState{})
|
||||||
orm.RegisterModel(&model.StorePriceScoreSnapshot{})
|
orm.RegisterModel(&model.StorePriceScoreSnapshot{})
|
||||||
orm.RegisterModel(&model.StoreSkuNamePrice{})
|
orm.RegisterModel(&model.StoreSkuNamePrice{})
|
||||||
orm.RegisterModel(&model.OrderSupplementFee{})
|
orm.RegisterModel(&model.OrderSupplementFee{})
|
||||||
|
|||||||
@@ -169,6 +169,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:Auth2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:Auth2Controller"],
|
||||||
|
beego.ControllerComments{
|
||||||
|
Method: "GetUserByMiniInfo",
|
||||||
|
Router: `/GetUserByMiniInfo`,
|
||||||
|
AllowHTTPMethods: []string{"post"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:Auth2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:Auth2Controller"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:Auth2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:Auth2Controller"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "Login",
|
Method: "Login",
|
||||||
@@ -1593,6 +1602,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ReportController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ReportController"],
|
||||||
|
beego.ControllerComments{
|
||||||
|
Method: "GetStoreManageState",
|
||||||
|
Router: `/GetStoreManageState`,
|
||||||
|
AllowHTTPMethods: []string{"get"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ReportController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ReportController"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ReportController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ReportController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "PriceRefer",
|
Method: "PriceRefer",
|
||||||
@@ -1827,6 +1845,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
||||||
|
beego.ControllerComments{
|
||||||
|
Method: "RefreshNoImgSku",
|
||||||
|
Router: `/RefreshNoImgSku`,
|
||||||
|
AllowHTTPMethods: []string{"post"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "ReorderCategories",
|
Method: "ReorderCategories",
|
||||||
@@ -2583,6 +2610,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
|
||||||
|
beego.ControllerComments{
|
||||||
|
Method: "GetStoresSkusForStore",
|
||||||
|
Router: `/GetStoresSkusForStore`,
|
||||||
|
AllowHTTPMethods: []string{"get"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "GetStoresSkusSaleInfo",
|
Method: "GetStoresSkusSaleInfo",
|
||||||
@@ -2628,6 +2664,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
|
||||||
|
beego.ControllerComments{
|
||||||
|
Method: "GetVendorStoreSkus",
|
||||||
|
Router: `/GetVendorStoreSkus`,
|
||||||
|
AllowHTTPMethods: []string{"post"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "GetVendorStoreSkusInfo",
|
Method: "GetVendorStoreSkusInfo",
|
||||||
@@ -2943,6 +2988,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SysController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SysController"],
|
||||||
|
beego.ControllerComments{
|
||||||
|
Method: "AddVendorOrgCode",
|
||||||
|
Router: `/AddVendorOrgCode`,
|
||||||
|
AllowHTTPMethods: []string{"post"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SysController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SysController"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SysController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SysController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "GetEbaiRTFDetail",
|
Method: "GetEbaiRTFDetail",
|
||||||
|
|||||||
Reference in New Issue
Block a user