Accept Merge Request #199: (mark -> master)

Merge Request: 更新master
Created By: @苏尹岚
Accepted By: @苏尹岚
URL: https://rosydev.coding.net/p/jx-callback/d/jx-callback/git/merge/199
This commit is contained in:
苏尹岚
2020-04-01 16:32:23 +08:00
55 changed files with 2515 additions and 281 deletions

View File

@@ -271,7 +271,8 @@ func (c *OrderManager) SaveOrder(order *model.GoodsOrder, isAdjust bool, db *dao
} }
} }
order.ConsigneeName = utils.LimitUTF8StringLen(order.ConsigneeName, 32) order.ConsigneeName = utils.LimitUTF8StringLen2(order.ConsigneeName, 32)
order.ConsigneeAddress = utils.LimitUTF8StringLen2(order.ConsigneeAddress, 255)
created, _, err2 := db.Db.ReadOrCreate(order, "VendorOrderID", "VendorID") created, _, err2 := db.Db.ReadOrCreate(order, "VendorOrderID", "VendorID")
if err = err2; err == nil { if err = err2; err == nil {
originalOrder := &model.GoodsOrderOriginal{ originalOrder := &model.GoodsOrderOriginal{
@@ -424,6 +425,7 @@ func (c *OrderManager) updateOrderOtherInfo(order *model.GoodsOrder, db *dao.Dao
} }
if err = c.updateOrderSkuOtherInfo(order, db, payPercentage, changePriceType); err == nil { if err = c.updateOrderSkuOtherInfo(order, db, payPercentage, changePriceType); err == nil {
jxutils.RefreshOrderSkuRelated(order) jxutils.RefreshOrderSkuRelated(order)
jxutils.RefreshOrderEarningPrice2(order, payPercentage)
// caculateOrderEarningPrice(order, payPercentage) // caculateOrderEarningPrice(order, payPercentage)
} }
return err return err
@@ -872,5 +874,3 @@ func RefreshOrdersPriceInfo(ctx *jxcontext.Context, fromTime, toTime time.Time,
} }
return hint, err return hint, err
} }

View File

@@ -49,8 +49,14 @@ type StoresOrderSaleInfo struct {
type OrderSkusAccept struct { type OrderSkusAccept struct {
model.SkuAndName model.SkuAndName
SumWeight int `json:"sumWeight"` SumWeight int `json:"sumWeight"`
SumCount int `json:"sumCount"` SumCount int `json:"sumCount"`
Img string `json:"img"`
}
type OrderCount struct {
Count int `json:"count"` //销量
Flag bool `json:"flag"` //true表示可以买
} }
func (c *OrderManager) GetStoreOrderCountInfo(ctx *jxcontext.Context, storeID, lastHours int, isIncludeFake bool) (countInfo []*model.GoodsOrderCountInfo, err error) { func (c *OrderManager) GetStoreOrderCountInfo(ctx *jxcontext.Context, storeID, lastHours int, isIncludeFake bool) (countInfo []*model.GoodsOrderCountInfo, err error) {
@@ -621,19 +627,19 @@ func (c *OrderManager) GetStoresOrderSaleInfo(ctx *jxcontext.Context, storeIDLis
func (c *OrderManager) GetStoresOrderSaleInfoNew(ctx *jxcontext.Context, storeIDList []int, fromTime time.Time, toTime time.Time, statusList []int) (saleInfoList []*dao.StoresOrderSaleInfo, err error) { func (c *OrderManager) GetStoresOrderSaleInfoNew(ctx *jxcontext.Context, storeIDList []int, fromTime time.Time, toTime time.Time, statusList []int) (saleInfoList []*dao.StoresOrderSaleInfo, err error) {
db := dao.GetDB() db := dao.GetDB()
var isFinish = true // var isFinish = true
if toTime.Sub(fromTime).Hours() > 24 { // if toTime.Sub(fromTime).Hours() > 24 {
isFinish = false // isFinish = false
} // }
orderSkuList, err := dao.GetStoreOrderSkuList(db, storeIDList, fromTime, toTime, statusList, isFinish) orderSkuList, err := dao.GetStoreOrderSkuList(db, storeIDList, fromTime, toTime, statusList, true)
if err != nil { if err != nil {
return nil, err return nil, err
} }
afsSkuList, err := dao.GetStoreAfsOrderSkuList(db, storeIDList, fromTime, toTime, []int{model.AfsOrderStatusFinished}, isFinish) afsSkuList, err := dao.GetStoreAfsOrderSkuList(db, storeIDList, fromTime, toTime, []int{model.AfsOrderStatusFinished}, true)
if err != nil { if err != nil {
return nil, err return nil, err
} }
orderSkuList4Afs, err := dao.GetStoreOrderSkuList4Afs(db, storeIDList, fromTime, toTime, isFinish) orderSkuList4Afs, err := dao.GetStoreOrderSkuList4Afs(db, storeIDList, fromTime, toTime, true)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -641,7 +647,11 @@ func (c *OrderManager) GetStoresOrderSaleInfoNew(ctx *jxcontext.Context, storeID
orderMap = make(map[string]*model.GoodsOrder) orderMap = make(map[string]*model.GoodsOrder)
orderSkuMap = make(map[string]*dao.OrderSkuWithActualPayPrice) orderSkuMap = make(map[string]*dao.OrderSkuWithActualPayPrice)
saleInfoMap = make(map[int64]*dao.StoresOrderSaleInfo) saleInfoMap = make(map[int64]*dao.StoresOrderSaleInfo)
for _, v := range skuList { var flagVendorOrderID string
if len(skuList) > 0 {
flagVendorOrderID = skuList[0].VendorOrderID
}
for k, v := range skuList {
if v.EarningPrice == 0 { if v.EarningPrice == 0 {
v.EarningPrice = jxutils.CaculateSkuEarningPrice(v.ShopPrice, v.SalePrice, v.PayPercentage) v.EarningPrice = jxutils.CaculateSkuEarningPrice(v.ShopPrice, v.SalePrice, v.PayPercentage)
} }
@@ -663,7 +673,15 @@ func (c *OrderManager) GetStoresOrderSaleInfoNew(ctx *jxcontext.Context, storeID
saleInfo.ShopPrice += v.ShopPrice * int64(v.Count) saleInfo.ShopPrice += v.ShopPrice * int64(v.Count)
saleInfo.VendorPrice += v.VendorPrice * int64(v.Count) saleInfo.VendorPrice += v.VendorPrice * int64(v.Count)
saleInfo.SalePrice += v.SalePrice * int64(v.Count) saleInfo.SalePrice += v.SalePrice * int64(v.Count)
saleInfo.EarningPrice += v.EarningPrice * int64(v.Count) // saleInfo.EarningPrice += v.EarningPrice * int64(v.Count)
if v.VendorOrderID == flagVendorOrderID {
if k == 0 {
saleInfo.EarningPrice = v.NewEarningPrice
}
} else {
flagVendorOrderID = v.VendorOrderID
saleInfo.EarningPrice += v.NewEarningPrice
}
universalOrderID := jxutils.ComposeUniversalOrderID(v.VendorOrderID, v.VendorID) universalOrderID := jxutils.ComposeUniversalOrderID(v.VendorOrderID, v.VendorID)
if orderMap[universalOrderID] == nil { if orderMap[universalOrderID] == nil {
@@ -1148,7 +1166,7 @@ func (c *OrderManager) RefreshOrderFinancial(ctx *jxcontext.Context, fromTime, t
func GetOrdersAccept(ctx *jxcontext.Context, storeID int) (result []*OrderSkusAccept, err error) { func GetOrdersAccept(ctx *jxcontext.Context, storeID int) (result []*OrderSkusAccept, err error) {
db := dao.GetDB() db := dao.GetDB()
sql := ` sql := `
SELECT SUM(a.count) sum_count, SUM(a.weight*a.count) sum_weight, c.*, d.name, d.unit, d.prefix SELECT SUM(a.count) sum_count, SUM(a.weight*a.count) sum_weight, c.*, d.name, d.unit, d.prefix, d.img
FROM order_sku a FROM order_sku a
JOIN goods_order b ON b.vendor_order_id = a.vendor_order_id AND b.vendor_id = a.vendor_id JOIN goods_order b ON b.vendor_order_id = a.vendor_order_id AND b.vendor_id = a.vendor_id
JOIN sku c ON c.id = a.sku_id JOIN sku c ON c.id = a.sku_id
@@ -1157,6 +1175,7 @@ func GetOrdersAccept(ctx *jxcontext.Context, storeID int) (result []*OrderSkusAc
AND b.status = ? AND b.status = ?
AND b.order_created_at <= NOW() AND b.order_created_at >= ? AND b.order_created_at <= NOW() AND b.order_created_at >= ?
GROUP BY 3 GROUP BY 3
ORDER BY sum_weight DESC
` `
sqlParams := []interface{}{ sqlParams := []interface{}{
storeID, storeID,
@@ -1166,3 +1185,57 @@ func GetOrdersAccept(ctx *jxcontext.Context, storeID int) (result []*OrderSkusAc
err = dao.GetRows(db, &result, sql, sqlParams) err = dao.GetRows(db, &result, sql, sqlParams)
return result, err return result, err
} }
func GetMatterStoreOrderCount(ctx *jxcontext.Context, storeID int) (result *OrderCount, err error) {
var (
db = dao.GetDB()
orderPays []*model.OrderPay
orderCount = &OrderCount{}
orderTime time.Time
flag = false
)
sql := `
SELECT b.*
FROM goods_order a
JOIN order_pay b ON a.vendor_order_id = b.vendor_order_id
WHERE IF(a.store_id = 0, a.jx_store_id, a.store_id) = 666666
AND a.from_store_id = ?
AND a.status >= ? AND a.status <> ?
AND b.status = ?
ORDER BY b.pay_finished_at DESC
LIMIT 1
`
sqlParams := []interface{}{storeID, model.OrderStatusDelivering, model.OrderStatusCanceled, model.PayStatusYes}
err = dao.GetRows(db, &orderPays, sql, sqlParams)
if len(orderPays) != 0 {
orderPay := orderPays[0]
if time.Now().Sub(*orderPay.PayFinishedAt).Hours() < 24*7 {
flag = false
} else {
flag = true
}
orderTime = *orderPay.PayFinishedAt
} else {
orderTime = time.Now().AddDate(0, -1, 0)
flag = true
}
sql2 := `
SELECT COUNT(*) count
FROM goods_order
WHERE IF(store_id = 0,jx_store_id,store_id) = ?
AND order_created_at <= NOW() AND order_created_at >= ?
AND status = ?
`
sqlParams2 := []interface{}{
storeID,
orderTime,
model.OrderStatusFinished,
}
err = dao.GetRow(db, &orderCount, sql2, sqlParams2)
if err != nil {
return nil, err
}
orderCount.Flag = flag
// orderCount.Count = 1000
return orderCount, err
}

View File

@@ -37,6 +37,13 @@ func (c *BaseScheduler) CreateWaybillOnProviders(ctx *jxcontext.Context, order *
courierVendorID := storeCourier.VendorID courierVendorID := storeCourier.VendorID
bill, err2 := c.CreateWaybill(courierVendorID, order, maxDeliveryFee) bill, err2 := c.CreateWaybill(courierVendorID, order, maxDeliveryFee)
if err = err2; err == nil { if err = err2; err == nil {
stores, _ := dao.GetStoreList(dao.GetDB(), []int{order.StoreID}, nil, nil, nil, "")
if len(stores) > 0 {
if stores[0].PayPercentage <= 50 {
order.NewEarningPrice = (order.TotalShopMoney - bill.DesiredFee) * int64((100 - stores[0].PayPercentage/2)) / 10000
dao.UpdateEntity(dao.GetDB(), order, "NewEarningPrice")
}
}
globals.SugarLogger.Debugf("CreateWaybillOnProviders orderID:%s userName:%s vendorID:%d bill:%v", order.VendorOrderID, userName, courierVendorID, bill) globals.SugarLogger.Debugf("CreateWaybillOnProviders orderID:%s userName:%s vendorID:%d bill:%v", order.VendorOrderID, userName, courierVendorID, bill)
bills = append(bills, bill) bills = append(bills, bill)
if createOnlyOne { if createOnlyOne {

View File

@@ -655,7 +655,7 @@ func (s *DefScheduler) isWaybillCourierSame(savedOrderInfo *WatchOrderInfo, bill
func (s *DefScheduler) addWaybill2Map(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) { func (s *DefScheduler) addWaybill2Map(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) {
if _, ok := savedOrderInfo.waybills[bill.WaybillVendorID]; ok { if _, ok := savedOrderInfo.waybills[bill.WaybillVendorID]; ok {
if !model.IsWaybillPlatformOwn(bill) { // 购买平台重复发相同号的新运单是正常的,京东就是 if !model.IsWaybillPlatformOwn(bill) && savedOrderInfo.order.StoreID != 666666 { // 购买平台重复发相同号的新运单是正常的,京东就是
globals.SugarLogger.Warnf("addWaybill2Map bill:%v already exists", bill) globals.SugarLogger.Warnf("addWaybill2Map bill:%v already exists", bill)
} }
} }
@@ -1333,7 +1333,7 @@ func setFakeActualPayPrice(order *model.GoodsOrder) (newOrder *model.GoodsOrder)
storeDetail, err := dao.GetStoreDetail(dao.GetDB(), order.JxStoreID, order.VendorID) storeDetail, err := dao.GetStoreDetail(dao.GetDB(), order.JxStoreID, order.VendorID)
if err == nil { if err == nil {
if storeDetail.PayPercentage < 50 { if storeDetail.PayPercentage < 50 {
orderCopy.ActualPayPrice = order.TotalShopMoney * (100 - int64(storeDetail.PayPercentage/2)) * 100 orderCopy.ActualPayPrice = order.TotalShopMoney * (100 - int64(storeDetail.PayPercentage/2)) / 100
} else { } else {
orderCopy.ActualPayPrice = order.EarningPrice orderCopy.ActualPayPrice = order.EarningPrice
} }

View File

@@ -297,6 +297,7 @@ func checkConfig(opFlag int, configType, key, value string) (err error) {
err = checkSysConfig(key, value) err = checkSysConfig(key, value)
} }
case model.ConfigTypeJxStore: case model.ConfigTypeJxStore:
case model.ConfigTypeCookie:
default: default:
err = fmt.Errorf("当前只支持配置:%s, 传入的配置类型:%s", utils.Format4Output(model.ConfigTypeName, true), configType) err = fmt.Errorf("当前只支持配置:%s, 传入的配置类型:%s", utils.Format4Output(model.ConfigTypeName, true), configType)
} }

View File

@@ -265,6 +265,13 @@ func ReorderCategories(ctx *jxcontext.Context, parentID int, categoryIDs []int,
db := dao.GetDB() db := dao.GetDB()
if err = dao.GetEntitiesByKV(db, &cats, utils.Params2Map(model.FieldParentID, parentID), false); err == nil { if err = dao.GetEntitiesByKV(db, &cats, utils.Params2Map(model.FieldParentID, parentID), false); err == nil {
catsLen := len(cats) catsLen := len(cats)
if !isExd {
for _, v := range cats {
if v.IsExdSpec == 1 {
catsLen--
}
}
}
if catsLen != len(categoryIDs) { if catsLen != len(categoryIDs) {
return ErrInputCatsDoesntMatch return ErrInputCatsDoesntMatch
} }
@@ -385,9 +392,11 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku bool, params ma
FROM sku_name t1 FROM sku_name t1
LEFT JOIN sku t2 ON t1.id = t2.name_id AND t2.deleted_at = ? LEFT JOIN sku t2 ON t1.id = t2.name_id AND t2.deleted_at = ?
LEFT JOIN sku_name_place_bind t3 ON t1.id = t3.name_id LEFT JOIN sku_name_place_bind t3 ON t1.id = t3.name_id
LEFT JOIN price_refer_snapshot t4 ON t4.city_code = ? AND t4.snapshot_at = ? AND t4.sku_id = t2.id
WHERE t1.deleted_at = ?` WHERE t1.deleted_at = ?`
sqlParams := []interface{}{ sqlParams := []interface{}{
utils.DefaultTimeValue, utils.DefaultTimeValue,
0, utils.Time2Date(time.Now().AddDate(0, 0, -1)),
utils.DefaultTimeValue, utils.DefaultTimeValue,
} }
if keyword != "" { if keyword != "" {
@@ -554,7 +563,8 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku bool, params ma
t1.upc, t1.upc,
t1.ex_prefix, t1.ex_prefix,
t1.ex_prefix_begin, t1.ex_prefix_begin,
t1.ex_prefix_end` t1.ex_prefix_end,
t4.mid_unit_price`
if isBySku { if isBySku {
sql += `, sql += `,
t2.id` t2.id`
@@ -588,10 +598,12 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku bool, params ma
t1.ex_prefix, t1.ex_prefix,
t1.ex_prefix_begin, t1.ex_prefix_begin,
t1.ex_prefix_end, t1.ex_prefix_end,
t4.mid_unit_price,
CONCAT("[", GROUP_CONCAT(DISTINCT CONCAT('{"id":', t2.id, ',"comment":"', t2.comment, '","status":', t2.status, 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"), ',"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, '","lastOperator":"', t2.last_operator, '","specQuality":', t2.spec_quality, ',"specUnit":"', t2.spec_unit,
'","exdSkuID":"', t2.exd_sku_id, '","exdSkuID":"', t2.exd_sku_id,
'","eclpID":"', t2.eclp_id,
'","weight":', t2.weight, ',"categoryID":', t2.category_id, ',"nameID":', t2.name_id, '","weight":', t2.weight, ',"categoryID":', t2.category_id, ',"nameID":', t2.name_id,
', "seq":', t2.seq, ', "seq":', t2.seq,
"}")), "]") skus_str, "}")), "]") skus_str,
@@ -765,9 +777,11 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s
dao.Rollback(db) dao.Rollback(db)
return nil, err return nil, err
} }
if err = OnCreateThing(ctx, db, nil, int64(sku.ID), model.ThingTypeSku); err != nil { if sku.EclpID == "" {
dao.Rollback(db) if err = OnCreateThing(ctx, db, nil, int64(sku.ID), model.ThingTypeSku); err != nil {
return nil, err dao.Rollback(db)
return nil, err
}
} }
} }
for _, placeCode := range skuNameExt.Places { for _, placeCode := range skuNameExt.Places {
@@ -846,7 +860,10 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
} }
} }
} }
var eclpID string
if payload["eclpID"] != nil {
eclpID = payload["eclpID"].(string)
}
dao.Begin(db) dao.Begin(db)
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
@@ -859,7 +876,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
dao.Rollback(db) dao.Rollback(db)
return 0, err return 0, err
} }
if !isExd { if !isExd && eclpID == "" {
if err = OnUpdateThing(ctx, db, nil, int64(nameID), model.ThingTypeSkuName); err != nil { if err = OnUpdateThing(ctx, db, nil, int64(nameID), model.ThingTypeSkuName); err != nil {
dao.Rollback(db) dao.Rollback(db)
return 0, err return 0, err
@@ -885,7 +902,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
} }
} }
} }
skuList, err2 := dao.GetSkus(db, nil, []int{nameID}, nil, nil) skuList, err2 := dao.GetSkus(db, nil, []int{nameID}, nil, nil, nil)
if err = err2; err == nil { if err = err2; err == nil {
for _, v := range skuList { for _, v := range skuList {
sku := &v.Sku sku := &v.Sku
@@ -896,7 +913,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
dao.Rollback(db) dao.Rollback(db)
return 0, err return 0, err
} }
if sku.ExdSkuID == "" { if sku.ExdSkuID == "" && sku.EclpID == "" {
if err = OnUpdateThing(ctx, db, nil, int64(v.ID), model.ThingTypeSku); err != nil { if err = OnUpdateThing(ctx, db, nil, int64(v.ID), model.ThingTypeSku); err != nil {
dao.Rollback(db) dao.Rollback(db)
return 0, err return 0, err
@@ -956,7 +973,7 @@ func DeleteSkuName(ctx *jxcontext.Context, nameID int, userName string) (num int
return 0, err return 0, err
} }
skuList, err2 := dao.GetSkus(db, nil, []int{nameID}, nil, nil) skuList, err2 := dao.GetSkus(db, nil, []int{nameID}, nil, nil, nil)
if err = err2; err == nil { if err = err2; err == nil {
for _, v := range skuList { for _, v := range skuList {
sku := &v.Sku sku := &v.Sku
@@ -1084,7 +1101,7 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{}
} }
return 0, err return 0, err
} }
if sku.ExdSkuID == "" { if sku.ExdSkuID == "" && sku.EclpID == "" {
if err = OnUpdateThing(ctx, db, nil, int64(skuID), model.ThingTypeSku); err != nil { if err = OnUpdateThing(ctx, db, nil, int64(skuID), model.ThingTypeSku); err != nil {
dao.Rollback(db) dao.Rollback(db)
return 0, err return 0, err
@@ -1108,34 +1125,39 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{}
} }
func refreshStoreSkuPrice(ctx *jxcontext.Context, db *dao.DaoDB, skuID int) (err error) { func refreshStoreSkuPrice(ctx *jxcontext.Context, db *dao.DaoDB, skuID int) (err error) {
dao.Begin(db)
defer func() {
if r := recover(); r != nil || err != nil {
dao.Rollback(db)
if r != nil {
panic(r)
}
}
}()
list, err := dao.GetStoreSkusAndSkuName(db, nil, []int{skuID}, nil) list, err := dao.GetStoreSkusAndSkuName(db, nil, []int{skuID}, nil)
for _, v := range list { task := tasksch.NewParallelTask("refreshStoreSkuPrice", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx,
storeID := v.StoreID func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDJX) v := batchItemList[0].(*dao.StoreSkuAndName)
if err != nil { storeID := v.StoreID
return err storeDetail, _ := dao.GetStoreDetail(db, storeID, model.VendorIDJX)
} if storeDetail == nil {
storeSku := &model.StoreSkuBind{} return retVal, err
storeSku.ID = v.BindID }
storeSku.JdSyncStatus = v.JdSyncStatus | model.SyncFlagPriceMask storeSku := &model.StoreSkuBind{}
storeSku.MtwmSyncStatus = v.MtwmSyncStatus | model.SyncFlagPriceMask storeSku.ID = v.BindID
storeSku.EbaiSyncStatus = v.EbaiSyncStatus | model.SyncFlagPriceMask storeSku.JdSyncStatus = v.JdSyncStatus | model.SyncFlagPriceMask
storeSku.Price = jxutils.CaculateSkuPrice(int(v.UnitPrice), v.SpecQuality, v.SpecUnit, v.Unit) storeSku.MtwmSyncStatus = v.MtwmSyncStatus | model.SyncFlagPriceMask
storeSku.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), int(storeSku.Price)) storeSku.EbaiSyncStatus = v.EbaiSyncStatus | model.SyncFlagPriceMask
storeSku.LastOperator = ctx.GetUserName() storeSku.Price = jxutils.CaculateSkuPrice(int(v.UnitPrice), v.SpecQuality, v.SpecUnit, v.Unit)
storeSku.UpdatedAt = time.Now() storeSku.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), int(storeSku.Price))
dao.UpdateEntity(db, storeSku, "Price", "JdSyncStatus", "MtwmSyncStatus", "EbaiSyncStatus", "JxPrice") storeSku.LastOperator = ctx.GetUserName()
} storeSku.UpdatedAt = time.Now()
dao.Commit(db) dao.Begin(db)
defer func() {
if r := recover(); r != nil || err != nil {
dao.Rollback(db)
if r != nil {
panic(r)
}
}
}()
dao.UpdateEntity(db, storeSku, "Price", "JdSyncStatus", "MtwmSyncStatus", "EbaiSyncStatus", "JxPrice")
dao.Commit(db)
return retVal, err
}, list)
tasksch.HandleTask(task, nil, true).Run()
_, err = task.GetResult(0)
return err return err
} }
@@ -1404,7 +1426,7 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro
payload["exPrefixEnd"] = nil payload["exPrefixEnd"] = nil
_, err = UpdateSkuName(ctx, nameID, payload, false) _, err = UpdateSkuName(ctx, nameID, payload, false)
} else { } else {
skuList, err := dao.GetSkus(db, nil, []int{nameID}, nil, nil) skuList, err := dao.GetSkus(db, nil, []int{nameID}, nil, nil, nil)
if err == nil && len(skuList) > 0 { if err == nil && len(skuList) > 0 {
if skuList[0].ExPrefixBegin != nil { if skuList[0].ExPrefixBegin != nil {
_, err = UpdateSkuName(ctx, nameID, payload, false) _, err = UpdateSkuName(ctx, nameID, payload, false)
@@ -1437,7 +1459,7 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro
case 1: case 1:
if (now.Sub(toTimeP) <= 0 && now.Sub(fromTimeP) >= 0) || (now.Sub(fromTimeP) > 0 && now.Sub(toTimeP) > 0) { if (now.Sub(toTimeP) <= 0 && now.Sub(fromTimeP) >= 0) || (now.Sub(fromTimeP) > 0 && now.Sub(toTimeP) > 0) {
var skuIDs []int var skuIDs []int
skuList, err2 := dao.GetSkus(db, nil, nameIDs, nil, nil) skuList, err2 := dao.GetSkus(db, nil, nameIDs, nil, nil, nil)
if err = err2; err == nil { if err = err2; err == nil {
if len(skuList) > 0 { if len(skuList) > 0 {
for _, v := range skuList { for _, v := range skuList {
@@ -1484,18 +1506,25 @@ func SumExianDaDepot(ctx *jxcontext.Context, isAsync, isContinueWhenError bool)
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
v := batchItemList[0].(*ebaiapi.ExianDaSkus) v := batchItemList[0].(*ebaiapi.ExianDaSkus)
skus, err := api.EbaiAPI.GetExianDaSku(utils.Str2Int64(v.ElemeGoodsID)) skus, err := api.EbaiAPI.GetExianDaSku(utils.Str2Int64(v.ElemeGoodsID))
if err != nil { if err != nil || skus == nil {
globals.SugarLogger.Debugf("GetExianDaSku[%v]", v.ElemeGoodsID)
return result, err return result, err
} }
// sku := &model.Sku{}
// sku.ExdSkuID = v.ElemeGoodsID
// sku.DeletedAt = utils.DefaultTimeValue
// dao.GetEntity(db, sku, "ExdSkuID","DeletedAt")
skuNameExt := &model.SkuName{} skuNameExt := &model.SkuName{}
sql2 := ` sql2 := `
SELECT a.* SELECT a.*
FROM sku_name a FROM sku_name a
JOIN sku b ON b.name_id = a.id JOIN sku b ON b.name_id = a.id
WHERE a.upc = ? WHERE a.upc = ?
AND a.deleted_at = ? AND b.deleted_at = ?
` `
sqlParams2 := []interface{}{ sqlParams2 := []interface{}{
skus.UpcIds, skus.UpcIds[0],
utils.DefaultTimeValue, utils.DefaultTimeValue,
} }
dao.GetRow(db, skuNameExt, sql2, sqlParams2) dao.GetRow(db, skuNameExt, sql2, sqlParams2)
prefix, _, _, specUnit, unit, specQuality := jxutils.SplitSkuName(v.GoodsName) prefix, _, _, specUnit, unit, specQuality := jxutils.SplitSkuName(v.GoodsName)
@@ -1521,16 +1550,6 @@ func SumExianDaDepot(ctx *jxcontext.Context, isAsync, isContinueWhenError bool)
} }
} }
} else { } else {
skuCat := &model.SkuCategory{}
sql := `
SELECT *
FROM sku_category
WHERE ebai_category_id = ?
`
sqlParams := []interface{}{
skus.CategoryIDThird,
}
dao.GetRow(db, skuCat, sql, sqlParams)
skuName := &model.SkuName{ skuName := &model.SkuName{
Prefix: prefix, Prefix: prefix,
Name: v.GoodsName, Name: v.GoodsName,
@@ -1543,11 +1562,7 @@ func SumExianDaDepot(ctx *jxcontext.Context, isAsync, isContinueWhenError bool)
Upc: &v.UpcID, Upc: &v.UpcID,
Status: model.SkuStatusNormal, Status: model.SkuStatusNormal,
} }
if skuCat.ID != 0 { skuName.CategoryID = 35 //默认给了个分类
skuName.CategoryID = skuCat.ID
} else {
skuName.CategoryID = 35 //默认给了个分类
}
dao.WrapAddIDCULDEntity(skuName, ctx.GetUserName()) dao.WrapAddIDCULDEntity(skuName, ctx.GetUserName())
err = dao.CreateEntity(db, skuName) err = dao.CreateEntity(db, skuName)
if err != nil { if err != nil {
@@ -1600,7 +1615,6 @@ func UpdateExianDaSkuCategory(ctx *jxcontext.Context, isAsync, isContinueWhenErr
WHERE b.exd_sku_id <> '' WHERE b.exd_sku_id <> ''
AND a.deleted_at = ? AND a.deleted_at = ?
AND b.deleted_at = ? AND b.deleted_at = ?
AND a.category_id = 35
` `
sqlParams := []interface{}{ sqlParams := []interface{}{
utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue,

View File

@@ -2369,18 +2369,21 @@ func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64, needWalkDi
JOIN place city ON city.code = t1.city_code JOIN place city ON city.code = t1.city_code
JOIN store_map sm ON sm.store_id = t1.id AND sm.vendor_id = ? AND sm.deleted_at = ? AND sm.status <> ? JOIN store_map sm ON sm.store_id = t1.id AND sm.vendor_id = ? AND sm.deleted_at = ? AND sm.status <> ?
WHERE t1.deleted_at = ? AND t1.status <> ? AND t1.lng > ? AND t1.lng < ? AND t1.lat > ? AND t1.lat < ? WHERE t1.deleted_at = ? AND t1.status <> ? AND t1.lng > ? AND t1.lng < ? AND t1.lat > ? AND t1.lat < ?
AND sm.is_order <> ?
ORDER BY t1.id ORDER BY t1.id
` `
sqlParams := []interface{}{ sqlParams := []interface{}{
model.VendorIDJX, utils.DefaultTimeValue, model.StoreStatusDisabled, model.VendorIDJX, utils.DefaultTimeValue, model.StoreStatusDisabled,
utils.DefaultTimeValue, model.StoreStatusDisabled, jxutils.StandardCoordinate2Int(lng1), jxutils.StandardCoordinate2Int(lng2), jxutils.StandardCoordinate2Int(lat1), jxutils.StandardCoordinate2Int(lat2), utils.DefaultTimeValue, model.StoreStatusDisabled, jxutils.StandardCoordinate2Int(lng1), jxutils.StandardCoordinate2Int(lng2), jxutils.StandardCoordinate2Int(lat1), jxutils.StandardCoordinate2Int(lat2),
model.YES,
} }
var storeList1 []*Store4User var storeList1 []*Store4User
if err = dao.GetRows(dao.GetDB(), &storeList1, sql, sqlParams...); err == nil { if err = dao.GetRows(dao.GetDB(), &storeList1, sql, sqlParams...); err == nil {
var storeList2 []*Store4User var storeList2 []*Store4User
for _, v := range storeList1 { for _, v := range storeList1 {
if distance := jxutils.Point2StoreDistance(lng, lat, v.Lng, v.Lat, v.DeliveryRangeType, v.DeliveryRange); distance > 0 { distance := jxutils.Point2StoreDistance(lng, lat, v.Lng, v.Lat, v.DeliveryRangeType, v.DeliveryRange)
if distance > 0 || (lng == jxutils.IntCoordinate2Standard(v.Lng) && lat == jxutils.IntCoordinate2Standard(v.Lat)) {
v.Distance = distance v.Distance = distance
storeList2 = append(storeList2, v) storeList2 = append(storeList2, v)
} }
@@ -2388,19 +2391,28 @@ func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64, needWalkDi
// 为了审核用 // 为了审核用
if len(storeList2) == 0 { if len(storeList2) == 0 {
sql2 := `
SELECT t1.*,
city.name city_name
FROM store t1
JOIN place city ON city.code = t1.city_code
WHERE t1.deleted_at = ? AND t1.status <> ? AND t1.id = ?
`
sqlParams2 := []interface{}{ sqlParams2 := []interface{}{
model.VendorIDJX, utils.DefaultTimeValue, model.StoreStatusDisabled, // model.VendorIDJX, utils.DefaultTimeValue, model.StoreStatusDisabled,
utils.DefaultTimeValue, utils.DefaultTimeValue,
model.StoreStatusDisabled, model.StoreStatusDisabled,
jxutils.StandardCoordinate2Int(0), // jxutils.StandardCoordinate2Int(0),
jxutils.StandardCoordinate2Int(10000), // jxutils.StandardCoordinate2Int(10000),
jxutils.StandardCoordinate2Int(0), // jxutils.StandardCoordinate2Int(0),
jxutils.StandardCoordinate2Int(10000), // jxutils.StandardCoordinate2Int(10000),
} // model.YES,
dao.GetRows(dao.GetDB(), &storeList2, sql, sqlParams2...) 102919, //商城模板店
if len(storeList2) > 1 {
storeList2 = storeList2[:1]
} }
dao.GetRows(dao.GetDB(), &storeList2, sql2, sqlParams2...)
// if len(storeList2) > 1 {
// storeList2 = storeList2[:1]
// }
} }
// 如果要求以步行距离来算 // 如果要求以步行距离来算
@@ -2846,3 +2858,23 @@ func UpdateJdStoreNameAll(ctx *jxcontext.Context) (err error) {
} }
return err return err
} }
func DeletePrinterSeq(ctx *jxcontext.Context, storeIDs []int) (err error) {
db := dao.GetDB()
for _, v := range storeIDs {
stores, err := dao.GetStoreList(db, []int{v}, nil, nil, nil, "")
if err != nil || len(stores) == 0 {
return err
}
vendorID := stores[0].PrinterVendorID
if vendorID == model.NO {
return fmt.Errorf("该门店没有绑定打印机ID[%v],名字:[%v]", stores[0].ID, stores[0].Name)
}
if vendorID == model.VendorIDXiaoWM {
return fmt.Errorf("暂不支持该打印机品牌清空打印队列,[%v]", model.VendorChineseNames[model.VendorIDXiaoWM])
}
handler := partner.GetPrinterPlatformFromVendorID(vendorID)
err = handler.EmptyPrintList(ctx, stores[0].PrinterSN, stores[0].PrinterKey)
}
return err
}

View File

@@ -191,6 +191,13 @@ type tUpdateSkuSpecTag struct {
IsSpec int `json:"isSpec"` IsSpec int `json:"isSpec"`
} }
type MatterStock struct {
SkuID int `json:"skuID"`
SkuNameID int `json:"skuNameID"`
Name string `json:"name"`
Stock int `json:"stock"`
}
const ( const (
maxStoreNameBind = 10000 // 最大门店SkuName bind个数 maxStoreNameBind = 10000 // 最大门店SkuName bind个数
maxStoreNameBind2 = 10000 // 最大门店乘SkuName个数 maxStoreNameBind2 = 10000 // 最大门店乘SkuName个数
@@ -228,10 +235,10 @@ 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 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, isFocus, keyword, isBySku, isAct, params, offset, pageSize) return GetStoresSkus(ctx, []int{storeID}, skuIDs, isFocus, false, keyword, isBySku, isAct, params, offset, pageSize)
} }
func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku, isAct bool, actVendorID int, params map[string]interface{}) (sql string, sqlParams []interface{}, err error) { func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku, isAct, isHighPrice bool, 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 = ?*/
@@ -302,6 +309,9 @@ func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool
utils.Bool2Int(isFocus), utils.Bool2Int(isFocus),
// model.SkuStatusNormal, // model.SkuStatusNormal,
}) })
if isHighPrice {
sql += " AND t4.unit_price > t6.mid_unit_price / IF(t3.pay_percentage < 50 , 70, t3.pay_percentage) * 1.2 * 100"
}
if isFocus { if isFocus {
sql += " AND ((t2.status = ? AND t1.status = ?) OR t4.status = ?)" sql += " AND ((t2.status = ? AND t1.status = ?) OR t4.status = ?)"
sqlParams = append(sqlParams, model.SkuStatusNormal, model.SkuStatusNormal, model.SkuStatusNormal) sqlParams = append(sqlParams, model.SkuStatusNormal, model.SkuStatusNormal, model.SkuStatusNormal)
@@ -428,11 +438,11 @@ 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 bool, 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, isFocus, isHighPrice bool, keyword string, isBySku, isAct bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *dao.StoreSkuNamesInfo, err error) {
return GetStoresSkusNew(ctx, storeIDs, skuIDs, isFocus, keyword, isBySku, isAct, params, offset, pageSize) return GetStoresSkusNew(ctx, storeIDs, skuIDs, isFocus, isHighPrice, keyword, isBySku, isAct, params, offset, pageSize)
} }
func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bool, 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, isFocus, isHighPrice bool, 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只能查询单店")
} }
@@ -444,7 +454,7 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bo
actVendorID = int(utils.Interface2Int64WithDefault(params["actVendorID"], -1)) actVendorID = int(utils.Interface2Int64WithDefault(params["actVendorID"], -1))
} }
db := dao.GetDB() db := dao.GetDB()
sql, sqlParams, err := getGetStoresSkusBaseSQL(db, storeIDs, skuIDs, isFocus, keyword, isBySku, isAct, actVendorID, params) sql, sqlParams, err := getGetStoresSkusBaseSQL(db, storeIDs, skuIDs, isFocus, keyword, isBySku, isAct, isHighPrice, actVendorID, params)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -513,7 +523,7 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bo
t3.id store_id, t3.name store_name, t3.pay_percentage, t3.id store_id, t3.name store_name, t3.pay_percentage,
t1.*, t1.*,
t2.name_id, t2.id sku_id, t2.spec_quality sku_spec_quality, t2.spec_unit sku_spec_unit, t2.weight, t2m.vendor_thing_id sku_jd_id, t2.name_id, t2.id sku_id, t2.spec_quality sku_spec_quality, t2.spec_unit sku_spec_unit, t2.weight, t2m.vendor_thing_id sku_jd_id,
t2.comment, t2.category_id sku_category_id, t2.status sku_status, t2.comment, t2.category_id sku_category_id, t2.status sku_status, t2.eclp_id,
t4.created_at bind_created_at, t4.updated_at bind_updated_at, t4.last_operator bind_last_operator, t4.deleted_at bind_deleted_at, t4.created_at bind_created_at, t4.updated_at bind_updated_at, t4.last_operator bind_last_operator, t4.deleted_at bind_deleted_at,
t4.sub_store_id, t4.price bind_price, IF(t4.unit_price IS NOT NULL, t4.unit_price, t1.price) unit_price, t4.status store_sku_status, t4.auto_sale_at, t4.sub_store_id, t4.price bind_price, IF(t4.unit_price IS NOT NULL, t4.unit_price, t1.price) unit_price, t4.status store_sku_status, t4.auto_sale_at,
t4.ebai_id, t4.mtwm_id, t4.ebai_id, t4.mtwm_id,
@@ -523,6 +533,9 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bo
t4.status_sale_begin, t4.status_sale_end, t4.status_sale_begin, t4.status_sale_end,
t6.mid_unit_price real_mid_unit_price t6.mid_unit_price real_mid_unit_price
` + sql ` + sql
if isHighPrice {
sql += " , t4.unit_price DESC LIMIT 99"
}
var tmpList []*tGetStoresSkusInfo var tmpList []*tGetStoresSkusInfo
beginTime := time.Now() beginTime := time.Now()
if err = dao.GetRows(db, &tmpList, sql, sqlParams...); err != nil { if err = dao.GetRows(db, &tmpList, sql, sqlParams...); err != nil {
@@ -2308,16 +2321,39 @@ func ReCalculateJxPriceLight(db *dao.DaoDB, ctx *jxcontext.Context, storeID int)
return err return err
} }
func GetTopSkusByStoreIDs(ctx *jxcontext.Context, storeIDs []int) (storeSkuNameExt []*dao.StoreSkuNameExt, err error) { func GetTopSkusByStoreIDs(ctx *jxcontext.Context, storeIDs []int) (storeSkuNameExt2 []*dao.StoreSkuNameExt, err error) {
var (
db = dao.GetDB()
skuMap = make(map[int]*dao.StoreSkuNameExt)
)
if len(storeIDs) == 0 { if len(storeIDs) == 0 {
return storeSkuNameExt, err return storeSkuNameExt2, err
} }
db := dao.GetDB() storeSkuNameExt, err := dao.GetTopSkusByStoreIDs(db, storeIDs)
storeSkuNameExt, err = dao.GetTopSkusByStoreIDs(db, storeIDs)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return storeSkuNameExt, err for _, v := range storeSkuNameExt {
if skuMap[v.SkuID] == nil {
skuMap[v.SkuID] = v
}
if skuMap[v.SkuID] != nil && v.Count != 0 {
skuMap[v.SkuID] = v
}
}
for _, v := range skuMap {
storeSkuNameExt2 = append(storeSkuNameExt2, v)
}
for i := 0; i < len(storeSkuNameExt2)-1; i++ {
for j := 0; j < len(storeSkuNameExt2)-i-1; j++ {
if storeSkuNameExt2[j].Count < storeSkuNameExt2[j+1].Count {
tmp := storeSkuNameExt2[j]
storeSkuNameExt2[j] = storeSkuNameExt2[j+1]
storeSkuNameExt2[j+1] = tmp
}
}
}
return storeSkuNameExt2, err
} }
func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNameAndPlaceList []*dao.SkuNameAndPlace, err error) { func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNameAndPlaceList []*dao.SkuNameAndPlace, err error) {
@@ -2371,7 +2407,7 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam
var skuList []*model.SkuAndName var skuList []*model.SkuAndName
storeSkuSyncInfo, _ := dao.GetStoreSkusAndSkuName(db, []int{storeID}, nil, []int{v.ID}) storeSkuSyncInfo, _ := dao.GetStoreSkusAndSkuName(db, []int{storeID}, nil, []int{v.ID})
for _, storeSkuSync := range storeSkuSyncInfo { for _, storeSkuSync := range storeSkuSyncInfo {
sku, _ := dao.GetSkus(db, []int{storeSkuSync.ID}, nil, nil, nil) sku, _ := dao.GetSkus(db, []int{storeSkuSync.ID}, nil, nil, nil, nil)
sku[0].Price = int(storeSkuSync.Price) sku[0].Price = int(storeSkuSync.Price)
skuList = append(skuList, sku...) skuList = append(skuList, sku...)
} }
@@ -2984,7 +3020,7 @@ func FocusStoreSkusByExcelBin(ctx *jxcontext.Context, reader io.Reader, isAsync,
for k, _ := range skuMap { for k, _ := range skuMap {
skuIDs = append(skuIDs, k) skuIDs = append(skuIDs, k)
} }
skuList, err := dao.GetSkus(db, skuIDs, nil, nil, nil) skuList, err := dao.GetSkus(db, skuIDs, nil, nil, nil, nil)
storeList, err := dao.GetStoreList(db, nil, nil, nil, nil, "") storeList, err := dao.GetStoreList(db, nil, nil, nil, nil, "")
if err != nil && len(skuList) == 0 { if err != nil && len(skuList) == 0 {
return result, err return result, err
@@ -3097,7 +3133,7 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBindInf
if err != nil { if err != nil {
return retVal, err return retVal, err
} }
skuList, err := dao.GetSkus(db, []int{skuID}, nil, nil, nil) skuList, err := dao.GetSkus(db, []int{skuID}, nil, nil, nil, nil)
if err != nil { if err != nil {
return retVal, err return retVal, err
} }
@@ -3173,6 +3209,9 @@ func AutoFocusStoreSkusForTopSkus(ctx *jxcontext.Context, isAsync, isContinueWhe
skuName []*model.SkuName skuName []*model.SkuName
skuNameMap = make(map[int]int) skuNameMap = make(map[int]int)
) )
if v.ID == model.MatterStoreID {
return retVal, err
}
sql := ` sql := `
SELECT DISTINCT a.name_id id SELECT DISTINCT a.name_id id
FROM sku a FROM sku a
@@ -3283,7 +3322,7 @@ func AutoFocusStoreSkusWithoutFocus(ctx *jxcontext.Context, skuIDs []int, isSync
} }
var skuBindSkuList []*StoreSkuBindSkuInfo var skuBindSkuList []*StoreSkuBindSkuInfo
skuMap := make(map[int]int) skuMap := make(map[int]int)
skuList, _ := dao.GetSkus(db, nil, []int{v.NameID}, nil, nil) skuList, _ := dao.GetSkus(db, nil, []int{v.NameID}, nil, nil, nil)
if len(v.Skus) != len(skuList) { if len(v.Skus) != len(skuList) {
for _, skus := range v.Skus { for _, skus := range v.Skus {
skuMap[skus.SkuID] = 1 skuMap[skus.SkuID] = 1
@@ -3369,10 +3408,13 @@ func UpdateStoreSkusSpecTagBin(ctx *jxcontext.Context, reader io.Reader, vendorI
} }
for _, v := range results { for _, v := range results {
store, err := dao.GetStoreDetail(db, v.StoreID, model.VendorIDMTWM) store, err := dao.GetStoreDetail(db, v.StoreID, model.VendorIDMTWM)
food, err := api.MtwmAPI.RetailGet(store.VendorStoreID, utils.Int2Str(v.SkuID))
if err != nil || store == nil { if err != nil || store == nil {
continue continue
} }
food, err := api.MtwmAPI.RetailGet(store.VendorStoreID, utils.Int2Str(v.SkuID))
if err != nil || food == nil {
continue
}
var foodData = make(map[string]interface{}) var foodData = make(map[string]interface{})
if v.IsSpec != 0 && v.IsSpec == -1 { if v.IsSpec != 0 && v.IsSpec == -1 {
v.IsSpec = 0 v.IsSpec = 0
@@ -3556,7 +3598,7 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i
return hint, err return hint, err
} }
func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus, vendorID int, isAsync, isContinueWhenError bool) (hint string, err error) { func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus, vendorID int, ignoreLow, isAsync, isContinueWhenError bool) (hint string, err error) {
var ( var (
db = dao.GetDB() db = dao.GetDB()
jdMap = make(map[int][]*JdStoreSkus) jdMap = make(map[int][]*JdStoreSkus)
@@ -3572,6 +3614,8 @@ func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus,
pricePercentagePack []*model.PricePercentageItem pricePercentagePack []*model.PricePercentageItem
cats []*model.ThingMap cats []*model.ThingMap
skus []*model.SkuAndName skus []*model.SkuAndName
vendorPrice int
specQuality float64
) )
sql := ` sql := `
SELECT t1.* SELECT t1.*
@@ -3586,7 +3630,7 @@ func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus,
} }
err = dao.GetRows(db, &cats, sql, sqlParams...) err = dao.GetRows(db, &cats, sql, sqlParams...)
if len(cats) > 0 { if len(cats) > 0 {
skus, err = dao.GetSkus(db, []int{int(cats[0].ThingID)}, nil, nil, nil) skus, err = dao.GetSkus(db, []int{int(cats[0].ThingID)}, nil, nil, nil, nil)
if err != nil || len(skus) == 0 { if err != nil || len(skus) == 0 {
return result, fmt.Errorf("没有找到该京西skuID,京西skuID :[%v]", cats[0].ThingID) return result, fmt.Errorf("没有找到该京西skuID,京西skuID :[%v]", cats[0].ThingID)
} }
@@ -3598,7 +3642,20 @@ func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus,
return result, fmt.Errorf("没有找到该京东门店对应的京西门店!,京东门店ID :[%v]", v.JdStoreID) return result, fmt.Errorf("没有找到该京东门店对应的京西门店!,京东门店ID :[%v]", v.JdStoreID)
} }
err = jxutils.Strings2Objs(store.PricePercentagePackStr, &pricePercentagePack) err = jxutils.Strings2Objs(store.PricePercentagePackStr, &pricePercentagePack)
jxPrice := jxutils.CaculateJxPriceByPricePack(pricePercentagePack, 0, v.Price) if skus[0].Unit == model.SpecialUnit {
if skus[0].SpecUnit == model.SpecUnitNames[1] || skus[0].SpecUnit == model.SpecUnitNames[2] {
specQuality = float64(skus[0].SpecQuality) * 1000
} else {
specQuality = float64(skus[0].SpecQuality)
}
vendorPrice = int(utils.Float64TwoInt64(specQuality / utils.Int2Float64(model.SpecialSpecQuality) * utils.Int2Float64(v.Price)))
} else {
vendorPrice = v.Price
}
jxPrice := jxutils.CaculateJxPriceByPricePack(pricePercentagePack, 0, vendorPrice)
if skus[0].Unit == model.SpecialUnit {
jxPrice = int(utils.Float64TwoInt64(utils.Int2Float64(jxPrice) * utils.Int2Float64(model.SpecialSpecQuality) / specQuality))
}
jdMap[store.ID] = append(jdMap[store.ID], &JdStoreSkus{ jdMap[store.ID] = append(jdMap[store.ID], &JdStoreSkus{
JdSkuID: skus[0].NameID, JdSkuID: skus[0].NameID,
Price: jxPrice, Price: jxPrice,
@@ -3621,7 +3678,16 @@ func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus,
for kk, vv := range v { for kk, vv := range v {
result, err := dao.GetStoreSkuBindByNameID(db, k, kk, model.SkuStatusNormal) result, err := dao.GetStoreSkuBindByNameID(db, k, kk, model.SkuStatusNormal)
if len(result) > 0 && err == nil { if len(result) > 0 && err == nil {
if result[0].UnitPrice > vv { if ignoreLow {
if result[0].UnitPrice > vv {
storeSkuBindInfo := &StoreSkuBindInfo{
StoreID: k,
NameID: kk,
UnitPrice: vv,
}
param = append(param, storeSkuBindInfo)
}
} else {
storeSkuBindInfo := &StoreSkuBindInfo{ storeSkuBindInfo := &StoreSkuBindInfo{
StoreID: k, StoreID: k,
NameID: kk, NameID: kk,
@@ -3636,14 +3702,29 @@ func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus,
for _, v := range jdStoreSkus { for _, v := range jdStoreSkus {
var ( var (
pricePercentagePack []*model.PricePercentageItem pricePercentagePack []*model.PricePercentageItem
vendorPrice int
specQuality float64
) )
skus, _ := dao.GetSkus(db, []int{v.JdSkuID}, nil, nil, nil) skus, _ := dao.GetSkus(db, []int{v.JdSkuID}, nil, nil, nil, nil)
if len(skus) == 0 { if len(skus) == 0 {
continue continue
} }
store, _ := dao.GetStoreDetail(db, v.JdStoreID, vendorID) store, _ := dao.GetStoreDetail(db, v.JdStoreID, vendorID)
err = jxutils.Strings2Objs(store.PricePercentagePackStr, &pricePercentagePack) err = jxutils.Strings2Objs(store.PricePercentagePackStr, &pricePercentagePack)
jxPrice := jxutils.CaculateJxPriceByPricePack(pricePercentagePack, 0, v.Price) if skus[0].Unit == model.SpecialUnit {
if skus[0].SpecUnit == model.SpecUnitNames[1] || skus[0].SpecUnit == model.SpecUnitNames[2] {
specQuality = float64(skus[0].SpecQuality) * 1000
} else {
specQuality = float64(skus[0].SpecQuality)
}
vendorPrice = int(utils.Float64TwoInt64(specQuality / utils.Int2Float64(model.SpecialSpecQuality) * utils.Int2Float64(v.Price)))
} else {
vendorPrice = v.Price
}
jxPrice := jxutils.CaculateJxPriceByPricePack(pricePercentagePack, 0, vendorPrice)
if skus[0].Unit == model.SpecialUnit {
jxPrice = int(utils.Float64TwoInt64(utils.Int2Float64(jxPrice) * utils.Int2Float64(model.SpecialSpecQuality) / specQuality))
}
jdMap[v.JdStoreID] = append(jdMap[v.JdStoreID], &JdStoreSkus{ jdMap[v.JdStoreID] = append(jdMap[v.JdStoreID], &JdStoreSkus{
JdSkuID: skus[0].NameID, JdSkuID: skus[0].NameID,
Price: jxPrice, Price: jxPrice,
@@ -3666,7 +3747,16 @@ func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus,
for kk, vv := range v { for kk, vv := range v {
result, err := dao.GetStoreSkuBindByNameID(db, k, kk, model.SkuStatusNormal) result, err := dao.GetStoreSkuBindByNameID(db, k, kk, model.SkuStatusNormal)
if len(result) > 0 && err == nil { if len(result) > 0 && err == nil {
if result[0].UnitPrice > vv { if ignoreLow {
if result[0].UnitPrice > vv {
storeSkuBindInfo := &StoreSkuBindInfo{
StoreID: k,
NameID: kk,
UnitPrice: vv,
}
param = append(param, storeSkuBindInfo)
}
} else {
storeSkuBindInfo := &StoreSkuBindInfo{ storeSkuBindInfo := &StoreSkuBindInfo{
StoreID: k, StoreID: k,
NameID: kk, NameID: kk,
@@ -3693,3 +3783,268 @@ func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus,
} }
return hint, err return hint, err
} }
func RefreshJxPriceByVendor2(ctx *jxcontext.Context, storeIDs []int, vendorID int, isAsync, isContinueWhenError bool) (hint string, err error) {
var (
db = dao.GetDB()
param []*StoreSkuBindInfo
)
taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
switch step {
case 0:
for _, storeID := range storeIDs {
var (
pricePercentagePack []*model.PricePercentageItem
skuNameMap = make(map[int]int64)
)
storeDetail, _ := dao.GetStoreDetail(db, storeID, vendorID)
err = jxutils.Strings2Objs(storeDetail.PricePercentagePackStr, &pricePercentagePack)
if partner.IsMultiStore(vendorID) {
mulitStoreSkuHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformStoreSkuHandler)
skuList, err := dao.GetSkusWithVendor(db, []int{vendorID}, nil, nil, nil, false)
if err != nil {
return "", err
}
bareStoreSkuMap := make(map[string][]*partner.StoreSkuInfo)
for _, sku := range skuList {
bareStoreSkuMap[sku.VendorOrgCode] = append(bareStoreSkuMap[sku.VendorOrgCode], &partner.StoreSkuInfo{
SkuID: sku.ID,
VendorSkuID: sku.VendorSkuID,
})
}
for _, orgCode := range apimanager.CurAPIManager.GetAppOrgCodeList(vendorID) {
outStoreSkuList, _ := mulitStoreSkuHandler.GetStoreSkusBareInfo(ctx, orgCode, task, storeID, storeDetail.VendorStoreID, bareStoreSkuMap[orgCode])
for _, sku := range outStoreSkuList {
price, nameID := getSkuNamePrice(db, sku.SkuID, sku.VendorPrice)
if skuNameMap[nameID] < price {
skuNameMap[nameID] = price
}
}
for k, v := range skuNameMap {
unitPrice := jxutils.CaculateJxPriceByPricePack(pricePercentagePack, 0, int(v))
storeSkuBindInfo := &StoreSkuBindInfo{
StoreID: storeID,
NameID: k,
UnitPrice: unitPrice,
}
param = append(param, storeSkuBindInfo)
}
}
} else {
singleStoreHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler)
outSkuNameList, _ := singleStoreHandler.GetStoreSkusFullInfo(ctx, task, storeID, storeDetail.VendorStoreID, nil)
for _, skuName := range outSkuNameList {
sku := skuName.SkuList[0]
price, nameID := getSkuNamePrice(db, sku.SkuID, sku.VendorPrice)
if skuNameMap[nameID] < price {
skuNameMap[nameID] = price
}
}
for k, v := range skuNameMap {
unitPrice := jxutils.CaculateJxPriceByPricePack(pricePercentagePack, 0, int(v))
storeSkuBindInfo := &StoreSkuBindInfo{
StoreID: storeID,
NameID: k,
UnitPrice: unitPrice,
}
param = append(param, storeSkuBindInfo)
}
}
}
case 1:
_, err = UpdateStoresSkusByBind(ctx, nil, param, isAsync, isContinueWhenError)
}
return result, err
}
taskSeq := tasksch.NewSeqTask2("根据平台价刷新京西平台价", ctx, isContinueWhenError, taskSeqFunc, 2)
tasksch.HandleTask(taskSeq, nil, true).Run()
if !isAsync {
_, err = taskSeq.GetResult(0)
hint = "1"
} else {
hint = taskSeq.GetID()
}
return hint, err
}
func getSkuNamePrice(db *dao.DaoDB, skuID int, orgPrice int64) (price int64, nameID int) {
var (
specQuality float64
)
skuList, _ := dao.GetSkus(db, []int{skuID}, nil, nil, nil, nil)
for _, v := range skuList {
if v.Unit == model.SpecialUnit {
if v.SpecUnit == model.SpecUnitNames[1] || v.SpecUnit == model.SpecUnitNames[2] {
specQuality = float64(v.SpecQuality) * 1000
} else {
specQuality = float64(v.SpecQuality)
}
price = utils.Float64TwoInt64(utils.Int2Float64(model.SpecialSpecQuality) / specQuality * utils.Int2Float64(int(orgPrice)))
} else {
price = orgPrice
}
nameID = v.NameID
}
return price, nameID
}
func BackUpStoreSkuBind(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) {
var (
db = dao.GetDB()
snapshotAt = utils.Time2Date(time.Now())
)
storeSkuBindHis := &model.StoreSkuBindHistory{
SnapshotAt: snapshotAt.AddDate(0, 0, -2),
}
storeSkuBindHis2 := &model.StoreSkuBindHistory{
SnapshotAt: snapshotAt,
}
dao.DeleteEntity(db, storeSkuBindHis, "SnapshotAt")
dao.DeleteEntity(db, storeSkuBindHis2, "SnapshotAt")
storeList, err := dao.GetStoreList(db, nil, nil, nil, nil, "")
task := tasksch.NewParallelTask("BackUpStoreSkuBind", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
store := batchItemList[0].(*model.Store)
storeSku, err := dao.GetStoresSkusInfo(db, []int{store.ID}, nil)
var storeSkuBindHiss []*model.StoreSkuBindHistory
for _, v := range storeSku {
storeSkuBindHis := &model.StoreSkuBindHistory{}
storeSkuBindHis.StoreSkuBind = *v
storeSkuBindHis.StoreSkuBindID = v.ID
storeSkuBindHis.StoreSkuBind.ID = 0
storeSkuBindHis.SnapshotAt = utils.Time2Date(snapshotAt)
storeSkuBindHiss = append(storeSkuBindHiss, storeSkuBindHis)
}
if len(storeSkuBindHiss) > 0 {
dao.CreateMultiEntities(db, storeSkuBindHiss)
}
return retVal, err
}, storeList)
tasksch.HandleTask(task, nil, true).Run()
if isAsync {
hint = task.GetID()
} else {
_, err = task.GetResult(0)
hint = "1"
}
return hint, err
}
func ReturnStoreSkuBind(ctx *jxcontext.Context, snapshotAt string, storeIDs, skuIDs []int) (err error) {
var (
spAt = utils.Time2Date(utils.Str2Time(snapshotAt))
db = dao.GetDB()
)
if len(storeIDs) == 0 {
return fmt.Errorf("必须选择一个门店!")
}
if len(storeIDs) > 1 {
return fmt.Errorf("暂时只支持一次操作一个门店!")
}
//删除原门店商品
sql := `DELETE FROM store_sku_bind WHERE store_id IN(` + dao.GenQuestionMarks(len(storeIDs)) + `)`
sqlParams := []interface{}{storeIDs}
if len(skuIDs) > 0 {
sql += " AND sku_id IN(" + dao.GenQuestionMarks(len(skuIDs)) + ")"
sqlParams = append(sqlParams, skuIDs)
}
_, err = dao.ExecuteSQL(db, sql, sqlParams)
//查询备份的门店商品
var storeHiss []*model.StoreSkuBindHistory
sql2 := `SELECT * FROM store_sku_bind_history WHERE snapshot_at = ? AND store_id IN(` + dao.GenQuestionMarks(len(storeIDs)) + `)`
sqlParams2 := []interface{}{spAt, storeIDs}
if len(skuIDs) > 0 {
sql2 += " AND sku_id IN(" + dao.GenQuestionMarks(len(skuIDs)) + ")"
sqlParams2 = append(sqlParams2, skuIDs)
}
err = dao.GetRows(db, &storeHiss, sql2, sqlParams2)
//插入到现在
var storeSkus []*model.StoreSkuBind
for _, v := range storeHiss {
storeSku := &model.StoreSkuBind{}
storeSku = &v.StoreSkuBind
storeSku.ID = v.StoreSkuBindID
storeSkus = append(storeSkus, storeSku)
}
if len(storeSkus) > 0 {
dao.CreateMultiEntities(db, storeSkus)
}
return err
}
func RefreshMatterStock(ctx *jxcontext.Context, skuID int) (err error) {
var (
db = dao.GetDB()
skuBindInfos []*StoreSkuBindInfo
)
if skuID != 0 {
skus, err := dao.GetSkus(db, []int{skuID}, nil, nil, nil, nil)
if err != nil || len(skus) == 0 {
return err
}
result, err := api.JdEclpAPI.QueryStock(skus[0].EclpID)
if err != nil || result == nil {
return err
}
var isSale = 0
if len(result) == 0 {
isSale = -1
} else {
if result[0].UsableNum > 0 {
isSale = 1
} else {
isSale = -1
}
}
storeSkuList, _ := dao.GetStoresSkusInfo(db, nil, []int{skuID})
for _, vv := range storeSkuList {
var storeSkuBindSkus []*StoreSkuBindSkuInfo
storeSkuBindSku := &StoreSkuBindSkuInfo{
SkuID: vv.SkuID,
IsSale: isSale,
}
storeSkuBindSkus = append(storeSkuBindSkus, storeSkuBindSku)
storeSkuBind := &StoreSkuBindInfo{
StoreID: vv.StoreID,
// NameID: v.SkuNameID,
Skus: storeSkuBindSkus,
}
skuBindInfos = append(skuBindInfos, storeSkuBind)
}
} else {
result, err := api.JdEclpAPI.QueryStock("")
if err != nil {
return err
}
for _, v := range result {
skus, err := dao.GetSkus(db, nil, nil, nil, nil, []string{v.GoodsNo})
if err != nil || len(skus) == 0 {
continue
}
var isSale = 0
if v.UsableNum > 0 {
isSale = 1
} else {
isSale = -1
}
storeSkuList, _ := dao.GetStoresSkusInfo(db, nil, []int{skus[0].ID})
for _, vv := range storeSkuList {
var storeSkuBindSkus []*StoreSkuBindSkuInfo
storeSkuBindSku := &StoreSkuBindSkuInfo{
SkuID: vv.SkuID,
IsSale: isSale,
}
storeSkuBindSkus = append(storeSkuBindSkus, storeSkuBindSku)
storeSkuBind := &StoreSkuBindInfo{
StoreID: vv.StoreID,
NameID: skus[0].NameID,
Skus: storeSkuBindSkus,
}
skuBindInfos = append(skuBindInfos, storeSkuBind)
}
}
}
//物料店666666
updateStoresSkusWithoutSync(ctx, db, []int{666666}, skuBindInfos, false)
return err
}

View File

@@ -433,7 +433,7 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin
func FilterJxDepotUnSaleSkuID() { func FilterJxDepotUnSaleSkuID() {
db := dao.GetDB() db := dao.GetDB()
filterJxDepotUnSaleSkuIds = filterJxDepotUnSaleSkuIds[0:0] filterJxDepotUnSaleSkuIds = filterJxDepotUnSaleSkuIds[0:0]
skuList, _ := dao.GetSkus(db, filterVendorDepotUnSaleSkuIds, []int{}, []int{}, []int{}) skuList, _ := dao.GetSkus(db, filterVendorDepotUnSaleSkuIds, []int{}, []int{}, []int{}, nil)
filterJxSkuInfoMap2 := GetFilterJxSkuInfoMap2(skuList) filterJxSkuInfoMap2 := GetFilterJxSkuInfoMap2(skuList)
for skuid, jxSkuInfo := range filterJxSkuInfoMap2 { for skuid, jxSkuInfo := range filterJxSkuInfoMap2 {
//过滤掉平台库下架,且京西库下架的商品,为下面比较门店商品用 //过滤掉平台库下架,且京西库下架的商品,为下面比较门店商品用
@@ -456,7 +456,7 @@ func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool
FilterJxDepotUnSaleSkuID() FilterJxDepotUnSaleSkuID()
filterVendorSkuInfoMap := GetFilterVendorSkuInfoMap(skuNameInfoList) filterVendorSkuInfoMap := GetFilterVendorSkuInfoMap(skuNameInfoList)
skuNameInfoList = skuNameInfoList[0:0] skuNameInfoList = skuNameInfoList[0:0]
skuList, _ := dao.GetSkus(db, []int{}, []int{}, []int{}, []int{}) skuList, _ := dao.GetSkus(db, []int{}, []int{}, []int{}, []int{}, nil)
filterJxSkuInfoMap2 := GetFilterJxSkuInfoMap2(skuList) filterJxSkuInfoMap2 := GetFilterJxSkuInfoMap2(skuList)
for skuid, jxSkuInfo := range filterJxSkuInfoMap2 { for skuid, jxSkuInfo := range filterJxSkuInfoMap2 {
var jxSkuDetailName string var jxSkuDetailName string
@@ -571,7 +571,7 @@ func CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int,
} }
} else { } else {
if singleFlag == false { if singleFlag == false {
jxSkuInfoDataSingle, _ = GetStoreSkus(ctx, storeID, []int{}, true, "", true, false, map[string]interface{}{}, 0, -1) jxSkuInfoDataSingle, _ = GetStoreSkus(ctx, storeID, nil, true, "", true, false, map[string]interface{}{}, 0, -1)
filterJxSkuInfoMapSingle = GetFilterJxSkuInfoMap(jxSkuInfoDataSingle.SkuNames) //map[京西商品ID:StoreSkuNameExt] filterJxSkuInfoMapSingle = GetFilterJxSkuInfoMap(jxSkuInfoDataSingle.SkuNames) //map[京西商品ID:StoreSkuNameExt]
singleFlag = true singleFlag = true
} }

View File

@@ -660,8 +660,10 @@ func buildSetFinishHook(task tasksch.ITask, ctx *jxcontext.Context) {
} }
if authInfo, err := ctx.GetV2AuthInfo(); err == nil { if authInfo, err := ctx.GetV2AuthInfo(); err == nil {
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, authInfo.UserID, "同步错误返回", noticeMsg) ddmsg.SendUserMessage(dingdingapi.MsgTyeText, authInfo.UserID, "同步错误返回", noticeMsg)
} else {
globals.SugarLogger.Debugf("同步错误发送钉钉消息失败, authinfo [%v] , [%v]", *authInfo, err)
} }
} else { }else {
if time.Now().Hour() >= 20 || time.Now().Hour() < 7 { if time.Now().Hour() >= 20 || time.Now().Hour() < 7 {
downloadURL, _, _ := WirteToExcelBySyncFailed(task) downloadURL, _, _ := WirteToExcelBySyncFailed(task)
user, err := dao.GetUserByID(dao.GetDB(), "mobile", "18160030913") user, err := dao.GetUserByID(dao.GetDB(), "mobile", "18160030913")

View File

@@ -378,7 +378,7 @@ func CreateUser(user *model.User, creatorName string) (err error) {
dao.WrapAddIDCULDEntity(user, creatorName) dao.WrapAddIDCULDEntity(user, creatorName)
user.UserID = utils.GetUUID() user.UserID = utils.GetUUID()
user.Status = model.UserStatusNormal user.Status = model.UserStatusNormal
user.DividePercentage = 5 user.DividePercentage = 1
return dao.CreateEntity(nil, user) return dao.CreateEntity(nil, user)
} }
@@ -1054,3 +1054,31 @@ func DeleteUserInfo(ctx *jxcontext.Context, userID string) (err error) {
} }
return err return err
} }
func GetMyJxStoreList(ctx *jxcontext.Context, mobile string) (storesInfo interface{}, err error) {
db := dao.GetDB()
user, err := dao.GetUserByID(db, "mobile", mobile)
if err != nil {
return nil, err
}
userID := user.UserID
var storeList []*dao.StoreWithCityName
if storeList, err = GetStoreList4User(ctx, mobile, userID); err == nil && len(storeList) > 0 {
// todo应该用通用方法
mapDataList := make([]map[string]interface{}, len(storeList))
for k, v := range storeList {
mapDataList[k] = map[string]interface{}{
"id": v.ID,
"address": v.Address,
"cityName": v.CityName,
"name": v.Name,
"tel1": v.Tel1,
"tel2": v.Tel2,
"payeeName": v.PayeeName,
"status": v.Status,
}
}
storesInfo = mapDataList
}
return storesInfo, err
}

View File

@@ -6,6 +6,8 @@ import (
"strings" "strings"
"time" "time"
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
"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"
@@ -57,7 +59,7 @@ func AddOperateEvent(ctx *jxcontext.Context, accessUUID, jsonData string, errCod
} }
jsonData = strings.ReplaceAll(jsonData, regexpToken.FindString(jsonData), "") jsonData = strings.ReplaceAll(jsonData, regexpToken.FindString(jsonData), "")
jsonData = utils.LimitUTF8StringLen(jsonData, 3200) jsonData = utils.LimitUTF8StringLen(jsonData, 3200)
errMsg = utils.LimitUTF8StringLen(errMsg, 3200) errMsg = utils.LimitUTF8StringLen(errMsg, 9999)
event := &model.OperateEvent{ event := &model.OperateEvent{
CreatedAt: time.Now(), CreatedAt: time.Now(),
LastOperator: ctx.GetUserName(), LastOperator: ctx.GetUserName(),
@@ -140,6 +142,7 @@ func GetCheckVendorCookie(ctx *jxcontext.Context, vendorIDs []int, isAuto bool)
var ( var (
ebaiOrderID = "1577329467196263592" ebaiOrderID = "1577329467196263592"
ebaiErr = "return not json" ebaiErr = "return not json"
ebaiErr2 = "系统错误"
mtStoreID = "7388603" mtStoreID = "7388603"
mtErr = "返回结果格式不正常" mtErr = "返回结果格式不正常"
jdUpcCode = "6952395700895" jdUpcCode = "6952395700895"
@@ -157,11 +160,31 @@ func GetCheckVendorCookie(ctx *jxcontext.Context, vendorIDs []int, isAuto bool)
case model.VendorIDEBAI: case model.VendorIDEBAI:
resultMap, err := api.EbaiAPI.GetStoreOrderInfo(ebaiOrderID) resultMap, err := api.EbaiAPI.GetStoreOrderInfo(ebaiOrderID)
if len(resultMap) < 1 && err != nil { if len(resultMap) < 1 && err != nil {
if strings.Contains(err.Error(), ebaiErr) { if strings.Contains(err.Error(), ebaiErr) || strings.Contains(err.Error(), ebaiErr2) {
errMsg += fmt.Sprintf(" 饿百账号:[%v]的Cookie无效了", vv) errMsg += fmt.Sprintf(" 饿百账号:[%v]的Cookie无效了", vv)
flag = true flag = true
} }
} }
result, err := api.Ebai2API.GetEbaiDepotSku(ebaiapi.EbaiWholeCountryStore, "190700570")
if err != nil || len(result) < 1 {
cc := &CheckCookie{}
cc.VendorID = v
cc.VendorOrgCode = "饿百后台饿鲜达全国账号"
cc.Status = "无效"
ccList = append(ccList, cc)
errMsg += fmt.Sprintf(" 饿百账号:[饿百后台饿鲜达全国账号]的Cookie无效了", vv)
flag = true
}
// result2, err2 := api.EbaiAPI.GetExianDaSkuDepot("190600741")
// if err2 != nil || result2 == nil {
// cc := &CheckCookie{}
// cc.VendorID = v
// cc.VendorOrgCode = "饿鲜达供应链系统"
// cc.Status = "无效"
// ccList = append(ccList, cc)
// errMsg += fmt.Sprintf(" 饿百账号:[饿鲜达供应链系统]的Cookie无效了", vv)
// flag = true
// }
case model.VendorIDMTWM: case model.VendorIDMTWM:
_, err := api.MtwmAPI.PackagePriceGet(mtStoreID) _, err := api.MtwmAPI.PackagePriceGet(mtStoreID)
if err != nil { if err != nil {
@@ -178,6 +201,16 @@ func GetCheckVendorCookie(ctx *jxcontext.Context, vendorIDs []int, isAuto bool)
flag = true flag = true
} }
} }
result2, err2 := api.JdPageAPI.GetCorporationInfo("11926674", "92510108MA68KK3M8P")
if err2 != nil || result2 == nil {
cc := &CheckCookie{}
cc.VendorID = v
cc.VendorOrgCode = "京东page账号"
cc.Status = "无效"
ccList = append(ccList, cc)
errMsg += fmt.Sprintf(" 京东page账号:的Cookie无效了", vv)
flag = true
}
} }
cc.VendorID = v cc.VendorID = v
cc.VendorOrgCode = vv cc.VendorOrgCode = vv
@@ -189,24 +222,6 @@ func GetCheckVendorCookie(ctx *jxcontext.Context, vendorIDs []int, isAuto bool)
ccList = append(ccList, cc) ccList = append(ccList, cc)
} }
} }
// else {
// cc := &CheckCookie{}
// var flag = false
// if v == model.VendorIDMTPS {
// err := api.MtpsAPI.GetAccountDetail()
// if err != nil && strings.Contains(err.Error(), mtpsErr) {
// errMsg += " 美团配送账号的Cookie无效了"
// flag = true
// }
// }
// cc.VendorID = v
// if flag {
// cc.Status = "无效"
// } else {
// cc.Status = "有效"
// }
// ccList = append(ccList, cc)
// }
} }
if isAuto && errMsg != "" { if isAuto && errMsg != "" {
globals.SugarLogger.Warnf("GetCheckVendorCookie[%v]", errMsg) globals.SugarLogger.Warnf("GetCheckVendorCookie[%v]", errMsg)

View File

@@ -6,7 +6,10 @@ import (
"sync" "sync"
"time" "time"
"git.rosy.net.cn/baseapi/platformapi/jdapi"
"git.rosy.net.cn/jx-callback/business/partner/purchase/jx/localjx" "git.rosy.net.cn/jx-callback/business/partner/purchase/jx/localjx"
"git.rosy.net.cn/jx-callback/globals/api"
"git.rosy.net.cn/jx-callback/business/jxstore/event" "git.rosy.net.cn/jx-callback/business/jxstore/event"
@@ -103,7 +106,23 @@ var (
cms.AutoSaleAtStr, cms.AutoSaleAtStr,
} }
backUpStoreSkuBindList = []string{
"23:30:00",
}
importantTaskMap = &sync.Map{} importantTaskMap = &sync.Map{}
cancelPayTimeOutOrderList = localjx.GetHalfHoursList()
ebaiStorePageCookieExdTOKEN string
ebaiStorePageCookieWMUSS2 string
ebaiStorePageCookieWMSTOKEN2 string
ebaiStorePageCookieWMUSS string
ebaiStorePageCookieWMSTOKEN string
mtwmCookieStr string
mtpsStoreToken string
jd2StorePageCookie string
JdStorePageCookie string
) )
func GetImportantTaskID(taskName string) string { func GetImportantTaskID(taskName string) string {
@@ -180,25 +199,76 @@ func Init() {
ScheduleTimerFunc("AutoPayForPopluarMan", func() { ScheduleTimerFunc("AutoPayForPopluarMan", func() {
localjx.AutoPayForPopluarMan(jxcontext.AdminCtx) localjx.AutoPayForPopluarMan(jxcontext.AdminCtx)
}, autoPayForPopluarManList) }, autoPayForPopluarManList)
ScheduleTimerFunc("CancelPayTimeOutOrder", func() {
localjx.CancelPayTimeOutOrder(jxcontext.AdminCtx)
}, cancelPayTimeOutOrderList)
ScheduleTimerFunc("BackUpStoreSkuBind", func() {
cms.BackUpStoreSkuBind(jxcontext.AdminCtx, true, true)
}, backUpStoreSkuBindList)
} }
ScheduleTimerFunc("AutoSaleStoreSku", func() { ScheduleTimerFunc("AutoSaleStoreSku", func() {
cms.AutoSaleStoreSku(jxcontext.AdminCtx, nil, false) cms.AutoSaleStoreSku(jxcontext.AdminCtx, nil, false)
}, autoSaleStoreSkuTimeList) }, autoSaleStoreSkuTimeList)
if beego.BConfig.RunMode == "beta" { if beego.BConfig.RunMode == "beta" {
ScheduleTimerFunc("CancelPayTimeOutOrder", func() {
localjx.CancelPayTimeOutOrder(jxcontext.AdminCtx)
}, cancelPayTimeOutOrderList)
ScheduleTimerFunc("GetAndStoreCitiesShops", func() { ScheduleTimerFunc("GetAndStoreCitiesShops", func() {
netspider.GetAndStoreCitiesShops(jxcontext.AdminCtx, nil, nil, 0, 0, false, false) netspider.GetAndStoreCitiesShops(jxcontext.AdminCtx, nil, nil, 0, 0, false, false)
}, []string{ }, []string{
"04:05:06", "04:05:06",
}) })
} }
if configs, err := dao.QueryConfigs(dao.GetDB(), "ebaiStorePageCookieExdTOKEN", model.ConfigTypeCookie, ""); err == nil {
ebaiStorePageCookieExdTOKEN = configs[0].Value
}
if configs, err := dao.QueryConfigs(dao.GetDB(), "ebaiStorePageCookieWMUSS2", model.ConfigTypeCookie, ""); err == nil {
ebaiStorePageCookieWMUSS2 = configs[0].Value
}
if configs, err := dao.QueryConfigs(dao.GetDB(), "ebaiStorePageCookieWMSTOKEN2", model.ConfigTypeCookie, ""); err == nil {
ebaiStorePageCookieWMSTOKEN2 = configs[0].Value
}
if configs, err := dao.QueryConfigs(dao.GetDB(), "ebaiStorePageCookieWMUSS", model.ConfigTypeCookie, ""); err == nil {
ebaiStorePageCookieWMUSS = configs[0].Value
}
if configs, err := dao.QueryConfigs(dao.GetDB(), "ebaiStorePageCookieWMSTOKEN", model.ConfigTypeCookie, ""); err == nil {
ebaiStorePageCookieWMSTOKEN = configs[0].Value
}
if configs, err := dao.QueryConfigs(dao.GetDB(), "mtwmCookieStr", model.ConfigTypeCookie, ""); err == nil {
mtwmCookieStr = configs[0].Value
}
if configs, err := dao.QueryConfigs(dao.GetDB(), "mtpsStoreToken", model.ConfigTypeCookie, ""); err == nil {
mtpsStoreToken = configs[0].Value
}
if configs, err := dao.QueryConfigs(dao.GetDB(), "jdStorePageCookie", model.ConfigTypeCookie, ""); err == nil {
JdStorePageCookie = configs[0].Value
}
if configs, err := dao.QueryConfigs(dao.GetDB(), "jd2StorePageCookie", model.ConfigTypeCookie, ""); err == nil {
jd2StorePageCookie = configs[0].Value
}
if globals.Jd2OrgCode != "" {
api.Jd2API.SetJdCookie(jd2StorePageCookie)
}
api.EbaiAPI.SetCookie("PASSPORT_DELIMONT_TOKEN", ebaiStorePageCookieExdTOKEN)
api.EbaiAPI.SetCookie("WMUSS", ebaiStorePageCookieWMUSS)
api.EbaiAPI.SetCookie("WMSTOKEN", ebaiStorePageCookieWMSTOKEN)
api.Ebai2API.SetCookie("PASSPORT_DELIMONT_TOKEN", ebaiStorePageCookieExdTOKEN)
api.Ebai2API.SetCookie("WMUSS", ebaiStorePageCookieWMUSS2)
api.Ebai2API.SetCookie("WMSTOKEN", ebaiStorePageCookieWMSTOKEN2)
api.MtwmAPI.SetCookieWithStr(mtwmCookieStr)
api.MtpsAPI.SetCookie("token", mtpsStoreToken)
api.JdAPI.SetJdCookie(JdStorePageCookie)
api.JdPageAPI.SetCookie(jdapi.AccessStorePageCookieName, JdStorePageCookie)
api.JdPageAPI.SetCookie(jdapi.AccessStorePageCookieName2, JdStorePageCookie)
} }
func syncStoreSku() { func syncStoreSku() {
syncFlag := model.SyncFlagPriceMask syncFlag := 0
if (time.Now().Unix()/24*3600)%10 == 0 { // syncFlag := model.SyncFlagPriceMask
syncFlag |= model.SyncFlagSaleMask // if (time.Now().Unix()/24*3600)%10 == 0 {
} // syncFlag |= model.SyncFlagSaleMask
// }
task := tasksch.NewParallelTask("同步京西与平台数据", nil, jxcontext.AdminCtx, task := tasksch.NewParallelTask("同步京西与平台数据", nil, jxcontext.AdminCtx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
step := batchItemList[0].(int) step := batchItemList[0].(int)
@@ -221,13 +291,18 @@ func syncStoreSku() {
// _, err = cms.CurVendorSync.FullSyncStoresSkus(jxcontext.AdminCtx, db, partner.GetMultiStoreVendorIDs(), nil, false, []int{27379}, true, true) // _, err = cms.CurVendorSync.FullSyncStoresSkus(jxcontext.AdminCtx, db, partner.GetMultiStoreVendorIDs(), nil, false, []int{27379}, true, true)
errList.AddErr(err) errList.AddErr(err)
case 1: case 1:
// errList.AddErr(cms.SetSingleStoreSkuSyncModifyStatus(db, []int{3}))
errList.AddErr(cms.SetSingleStoreSkuSyncModifyStatus(db, partner.GetSingleStoreVendorIDs())) errList.AddErr(cms.SetSingleStoreSkuSyncModifyStatus(db, partner.GetSingleStoreVendorIDs()))
// _, err = cms.CurVendorSync.AmendAndPruneStoreStuff(jxcontext.AdminCtx, []int{3}, nil, false, true, cms.AmendPruneAll, false)
_, err = cms.CurVendorSync.AmendAndPruneStoreStuff(jxcontext.AdminCtx, partner.GetSingleStoreVendorIDs(), nil, false, true, cms.AmendPruneAll, false) _, err = cms.CurVendorSync.AmendAndPruneStoreStuff(jxcontext.AdminCtx, partner.GetSingleStoreVendorIDs(), nil, false, true, cms.AmendPruneAll, false)
errList.AddErr(err) errList.AddErr(err)
SaveImportantTaskID(TaskNameSyncStoreSku, SpecialTaskID) SaveImportantTaskID(TaskNameSyncStoreSku, SpecialTaskID)
// taskID, err2 := cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{3}, nil, false, nil, nil, syncFlag, true, true)
taskID, err2 := cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, partner.GetSingleStoreVendorIDs(), nil, false, nil, nil, syncFlag, true, true) taskID, err2 := cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, partner.GetSingleStoreVendorIDs(), nil, false, nil, nil, syncFlag, true, true)
errList.AddErr(err2) errList.AddErr(err2)
SaveImportantTaskID(TaskNameSyncStoreSku, taskID) SaveImportantTaskID(TaskNameSyncStoreSku, taskID)
} }
@@ -246,7 +321,7 @@ func doDailyWork() {
cms.CurVendorSync.SyncStore2(jxcontext.AdminCtx, dao.GetDB(), nil, nil, true, true) cms.CurVendorSync.SyncStore2(jxcontext.AdminCtx, dao.GetDB(), nil, nil, true, true)
syncStoreSku() syncStoreSku()
localjx.RefreshAllMatterOrderStatus(jxcontext.AdminCtx)
InitEx() InitEx()
// 每天补全前一天与当天的订单 // 每天补全前一天与当天的订单

View File

@@ -133,7 +133,7 @@ func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales
//输出商品销量统计结果 //输出商品销量统计结果
skuAndNameMapData := make(map[int]*model.SkuAndName) skuAndNameMapData := make(map[int]*model.SkuAndName)
if len(storeSkuMapData) < len(citySkuIDs) { if len(storeSkuMapData) < len(citySkuIDs) {
skuAndNameList, err := dao.GetSkus(db, citySkuIDs, nil, nil, nil) skuAndNameList, err := dao.GetSkus(db, citySkuIDs, nil, nil, nil, nil)
if err == nil { if err == nil {
for _, value := range skuAndNameList { for _, value := range skuAndNameList {
skuAndNameMapData[value.ID] = value skuAndNameMapData[value.ID] = value
@@ -149,7 +149,7 @@ func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales
if storeSkuInfo != nil { if storeSkuInfo != nil {
skuName := storeSkuInfo.SkuName skuName := storeSkuInfo.SkuName
skuInfo := storeSkuInfo.Skus[0] skuInfo := storeSkuInfo.Skus[0]
storeSkuSales.SkuName = jxutils.ComposeSkuName(skuName.Prefix, skuName.Name, skuInfo.Comment, skuName.Unit, skuInfo.SkuSpecQuality, skuInfo.SkuSpecUnit, 0,skuName.ExPrefix,skuName.ExPrefixBegin,skuName.ExPrefixEnd) storeSkuSales.SkuName = jxutils.ComposeSkuName(skuName.Prefix, skuName.Name, skuInfo.Comment, skuName.Unit, skuInfo.SkuSpecQuality, skuInfo.SkuSpecUnit, 0, skuName.ExPrefix, skuName.ExPrefixBegin, skuName.ExPrefixEnd)
storeSkuSales.SkuImage = storeSkuInfo.Img storeSkuSales.SkuImage = storeSkuInfo.Img
storeSkuSales.SkuPrice = jxutils.IntPrice2StandardCurrencyString(int64(storeSkuInfo.Skus[0].BindPrice)) storeSkuSales.SkuPrice = jxutils.IntPrice2StandardCurrencyString(int64(storeSkuInfo.Skus[0].BindPrice))
} else if skuAndNameInfo != nil { } else if skuAndNameInfo != nil {
@@ -159,7 +159,7 @@ func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales
storeSkuSales.SkuImage = skuNameList[0].Img storeSkuSales.SkuImage = skuNameList[0].Img
prefix = skuNameList[0].Prefix prefix = skuNameList[0].Prefix
} }
storeSkuSales.SkuName = jxutils.ComposeSkuName(prefix, skuAndNameInfo.Name, skuAndNameInfo.Comment, skuAndNameInfo.Unit, skuAndNameInfo.SpecQuality, skuAndNameInfo.SpecUnit, 0,skuAndNameInfo.ExPrefix,skuAndNameInfo.ExPrefixBegin,skuAndNameInfo.ExPrefixEnd) storeSkuSales.SkuName = jxutils.ComposeSkuName(prefix, skuAndNameInfo.Name, skuAndNameInfo.Comment, skuAndNameInfo.Unit, skuAndNameInfo.SpecQuality, skuAndNameInfo.SpecUnit, 0, skuAndNameInfo.ExPrefix, skuAndNameInfo.ExPrefixBegin, skuAndNameInfo.ExPrefixEnd)
storeSkuSales.SkuPrice = "N/A" storeSkuSales.SkuPrice = "N/A"
} else { } else {
storeSkuSales.SkuName = "N/A" storeSkuSales.SkuName = "N/A"

View File

@@ -312,7 +312,7 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is
//如果微盟商品里找得到excel中的商品 //如果微盟商品里找得到excel中的商品
if skuMap[spuCode] != nil { if skuMap[spuCode] != nil {
//获取京西库商品 //获取京西库商品
skuList, _ := dao.GetSkus(db, nil, []int{int(utils.Str2Int64(goodsDetail.SkuMap.SingleSku.OuterSkuCode))}, nil, nil) skuList, _ := dao.GetSkus(db, nil, []int{int(utils.Str2Int64(goodsDetail.SkuMap.SingleSku.OuterSkuCode))}, nil, nil, nil)
if len(skuList) == 0 { if len(skuList) == 0 {
outPutData := DataFailed{ outPutData := DataFailed{
GoodsID: spuCode, GoodsID: spuCode,

View File

@@ -13,7 +13,9 @@ import (
const ( const (
EventCategory = "sys" EventCategory = "sys"
EventTypeWXToken = "wxToken" EventTypeWXToken = "wxToken"
EventTypeWX2Token = "wx2Token"
EventTypeYLYToken = "ylyToken" EventTypeYLYToken = "ylyToken"
EventTypeWeimobToken = "weimobToken" EventTypeWeimobToken = "weimobToken"
) )
@@ -57,6 +59,13 @@ func (h *Hub) OnNewWXToken(token string) {
}) })
} }
func (h *Hub) OnNewWX2Token(token string) {
h.eventHub.PostNewEvent(EventCategory, &eventhub.EventInfo{
Type: EventTypeWX2Token,
Data: token,
})
}
func (h *Hub) OnNewYLYToken(token string) { func (h *Hub) OnNewYLYToken(token string) {
h.eventHub.PostNewEvent(EventCategory, &eventhub.EventInfo{ h.eventHub.PostNewEvent(EventCategory, &eventhub.EventInfo{
Type: EventTypeYLYToken, Type: EventTypeYLYToken,
@@ -82,7 +91,10 @@ func (h *Hub) GetToken(tokenType, oldToken string, waitTime time.Duration) (toke
if weimobToken := api.WeimobAPI.GetToken(); weimobToken != nil { if weimobToken := api.WeimobAPI.GetToken(); weimobToken != nil {
token = string(utils.MustMarshal(weimobToken)) token = string(utils.MustMarshal(weimobToken))
} }
case EventTypeWX2Token:
token = api.WeixinMiniAPI2.CBGetToken()
} }
if token != oldToken { if token != oldToken {
tokenInfo = &TokenInfo{ tokenInfo = &TokenInfo{
IsNew: false, IsNew: false,
@@ -105,6 +117,10 @@ func (h *Hub) GetWXToken(oldToken string, waitTime time.Duration) (tokenInfo *To
return h.GetToken(EventTypeWXToken, oldToken, waitTime) return h.GetToken(EventTypeWXToken, oldToken, waitTime)
} }
func (h *Hub) GetWX2Token(oldToken string, waitTime time.Duration) (tokenInfo *TokenInfo) {
return h.GetToken(EventTypeWX2Token, oldToken, waitTime)
}
func (h *Hub) GetYLYToken(oldToken string, waitTime time.Duration) (tokenInfo *TokenInfo) { func (h *Hub) GetYLYToken(oldToken string, waitTime time.Duration) (tokenInfo *TokenInfo) {
return h.GetToken(EventTypeYLYToken, oldToken, waitTime) return h.GetToken(EventTypeYLYToken, oldToken, waitTime)
} }

View File

@@ -540,6 +540,15 @@ func RefreshOrderSkuRelated(order *model.GoodsOrder) *model.GoodsOrder {
return order return order
} }
func RefreshOrderEarningPrice2(order *model.GoodsOrder, payPercentage int) *model.GoodsOrder {
if payPercentage <= 50 {
order.NewEarningPrice = order.TotalShopMoney * int64((100 - payPercentage/2)) / 100
} else {
order.NewEarningPrice = order.EarningPrice
}
return order
}
func RefreshAfsOrderSkuRelated(afsOrder *model.AfsOrder) *model.AfsOrder { func RefreshAfsOrderSkuRelated(afsOrder *model.AfsOrder) *model.AfsOrder {
afsOrder.SkuUserMoney = 0 afsOrder.SkuUserMoney = 0
afsOrder.PmSkuSubsidyMoney = 0 afsOrder.PmSkuSubsidyMoney = 0

View File

@@ -271,7 +271,7 @@ func CaculateSkuActVendorPrice(price, percentage, priceAdd int) (vendorPrice int
func CaculateSkuVendorPrice(price, percentage, priceAdd int) (vendorPrice int) { func CaculateSkuVendorPrice(price, percentage, priceAdd int) (vendorPrice int) {
percentage = ConstrainPricePercentage(percentage) percentage = ConstrainPricePercentage(percentage)
vendorPrice = int(math.Round(float64(price*percentage)/100)) + priceAdd vendorPrice = int(math.Round(float64(price*percentage)/100)) + priceAdd
vendorPrice = int(math.Ceil(float64(vendorPrice)/10) * 10) vendorPrice = int(math.Round(float64(vendorPrice)/10) * 10)
if vendorPrice < 1 { if vendorPrice < 1 {
vendorPrice = 1 vendorPrice = 1
} }

View File

@@ -144,6 +144,7 @@ func BindPrinter(ctx *jxcontext.Context, storeID int, data string) (printResult
store.PrinterKey = bindResult.PrinterKey store.PrinterKey = bindResult.PrinterKey
store.PrinterBindInfo = string(utils.MustMarshal(bindResult)) store.PrinterBindInfo = string(utils.MustMarshal(bindResult))
if _, err = dao.UpdateEntity(db, store); err == nil { if _, err = dao.UpdateEntity(db, store); err == nil {
err = handler.EmptyPrintList(ctx, bindResult.PrinterSN, bindResult.PrinterKey)
printResult, err = handler.GetPrinterStatus(ctx, bindResult.PrinterSN, bindResult.PrinterKey) printResult, err = handler.GetPrinterStatus(ctx, bindResult.PrinterSN, bindResult.PrinterKey)
} }
} }

View File

@@ -23,7 +23,7 @@ var (
} }
) )
func SendSMSMsg(mobileList []string, signName, templateCode string, templateParam map[string]interface{}) (err error) { func SendSMSMsg(mobileList []string, signName, templateCode string, templateParam map[string]interface{}, order *model.GoodsOrder) (err error) {
if len(mobileList) > 0 { if len(mobileList) > 0 {
errList := errlist.New() errList := errlist.New()
mobileList = jxutils.StringMap2List(jxutils.StringList2Map(mobileList)) mobileList = jxutils.StringMap2List(jxutils.StringList2Map(mobileList))
@@ -42,6 +42,8 @@ func SendSMSMsg(mobileList []string, signName, templateCode string, templatePara
} else { } else {
globals.SugarLogger.Infof(errMsg) globals.SugarLogger.Infof(errMsg)
} }
} else {
err = updateStoreSMSNotifyMark(order)
} }
} }
} }
@@ -56,11 +58,13 @@ func getOrderNotifyPhone(order *model.GoodsOrder) (phoneList []string) {
} }
func NotifyNewOrder(order *model.GoodsOrder) (err error) { func NotifyNewOrder(order *model.GoodsOrder) (err error) {
err = SendSMSMsg(getOrderNotifyPhone(order), globals.SMSSignName, globals.SMSNewOrderTemplate, map[string]interface{}{ if isPushSMS(order) {
"daySeq": order.OrderSeq, err = SendSMSMsg(getOrderNotifyPhone(order), globals.SMSSignName, globals.SMSNewOrderTemplate, map[string]interface{}{
"consigneeName": order.ConsigneeName, "daySeq": order.OrderSeq,
"payMoney": jxutils.IntPrice2StandardString(order.ActualPayPrice), "consigneeName": order.ConsigneeName,
}) "payMoney": jxutils.IntPrice2StandardString(order.ActualPayPrice),
}, order)
}
return err return err
} }
@@ -69,6 +73,29 @@ func NotifyOrderCanceled(order *model.GoodsOrder) (err error) {
"vendorName": model.VendorChineseNames[order.VendorID], "vendorName": model.VendorChineseNames[order.VendorID],
"seq": order.OrderSeq, "seq": order.OrderSeq,
"orderID": order.VendorOrderID, "orderID": order.VendorOrderID,
}) }, order)
return err
}
func isPushSMS(order *model.GoodsOrder) bool {
stores, _ := dao.GetStoreList(dao.GetDB(), []int{order.StoreID}, nil, nil, nil, "")
if len(stores) > 0 {
if stores[0].SMSNotifyMark == model.NO {
return true
} else {
return false
}
} else {
return false
}
}
func updateStoreSMSNotifyMark(order *model.GoodsOrder) (err error) {
var db = dao.GetDB()
stores, _ := dao.GetStoreList(db, []int{order.StoreID}, nil, nil, nil, "")
if len(stores) > 0 {
stores[0].SMSNotifyMark = model.YES
_, err = dao.UpdateEntity(db, stores[0], "SMSNotifyMark")
}
return err return err
} }

View File

@@ -70,7 +70,7 @@ func RefreshConfig(configKey string, expiresTime time.Duration, configGetter fun
if handleType != 0 { if handleType != 0 {
if curConfig.Token, curConfig.Date = configGetter(); curConfig.Token == "" { if curConfig.Token, curConfig.Date = configGetter(); curConfig.Token == "" {
if globals.IsProductEnv() { if globals.IsProductEnv() {
globals.SugarLogger.Errorf("RefreshConfig %s get empty token", configKey) globals.SugarLogger.Infof("RefreshConfig %s get empty token", configKey)
sleepDuration = errRefreshGap sleepDuration = errRefreshGap
} else { } else {
globals.SugarLogger.Infof("RefreshConfig %s get empty token", configKey) globals.SugarLogger.Infof("RefreshConfig %s get empty token", configKey)
@@ -138,6 +138,33 @@ func RefreshWeixinToken() (err error) {
return err return err
} }
func RefreshWeixin2Token() (err error) {
if api.WeixinMiniAPI2 != nil {
err = RefreshConfig("wechat2", weixinTokenExpires, func() (token string, expireTimeStr string) {
globals.SugarLogger.Debugf("RefreshWeixin2Token RunMode:%s", beego.BConfig.RunMode)
if globals.IsMainProductEnv() {
if tokenInfo, err := api.WeixinMiniAPI2.CBRetrieveToken(); err == nil {
globals.SugarLogger.Debugf("RefreshWeixin2Token tokenInfo:%s", utils.Format4Output(tokenInfo, true))
token = tokenInfo.AccessToken
} else {
globals.SugarLogger.Errorf("RefreshWeixin2Token RefreshToken failed with error:%v", err)
}
} else {
if tokenInfo := getWX2TokenFromRemote(api.WeixinMiniAPI2.CBGetToken()); tokenInfo != nil {
expireTimeStr = utils.Time2Str(time.Now().Add(-weixinTokenExpires))
token = tokenInfo.Token
}
}
return token, expireTimeStr
}, func(value string) {
globals.SugarLogger.Debugf("RefreshWeixinToken setter value:%s", value)
syseventhub.SysEventHub.OnNewWX2Token(value)
api.WeixinMiniAPI2.CBSetToken(value)
})
}
return err
}
func RefreshWeimobToken() (err error) { func RefreshWeimobToken() (err error) {
if api.WeimobAPI != nil { if api.WeimobAPI != nil {
err = RefreshConfig("weimob", weimobTokenExpires, func() (token string, expireTimeStr string) { err = RefreshConfig("weimob", weimobTokenExpires, func() (token string, expireTimeStr string) {
@@ -145,6 +172,8 @@ func RefreshWeimobToken() (err error) {
if globals.IsMainProductEnv() { if globals.IsMainProductEnv() {
if tokenInfo, err := api.WeimobAPI.RefreshTokenByRefreshToken(); err == nil { if tokenInfo, err := api.WeimobAPI.RefreshTokenByRefreshToken(); err == nil {
return string(utils.MustMarshal(tokenInfo)), utils.Time2Str(time.Now().Add((time.Duration(tokenInfo.ExpiresIn) - weimobTokenExpires/time.Second) * time.Second)) return string(utils.MustMarshal(tokenInfo)), utils.Time2Str(time.Now().Add((time.Duration(tokenInfo.ExpiresIn) - weimobTokenExpires/time.Second) * time.Second))
} else {
globals.SugarLogger.Debugf("RefreshWeimobToken err:%s", err)
} }
} else { } else {
curToken := "" curToken := ""
@@ -277,6 +306,15 @@ func getWXTokenFromRemote(oldToken string) (tokenInfo *syseventhub.TokenInfo) {
return tokenInfo return tokenInfo
} }
func getWX2TokenFromRemote(oldToken string) (tokenInfo *syseventhub.TokenInfo) {
if !globals.IsMainProductEnv() && globals.GetWeixinTokenKey != "" && globals.GetWeixinTokenURL != "" {
tokenInfo = PollingRemotEvent(globals.GetWeixinTokenURL, 0, map[string]interface{}{
"oldToken": oldToken,
})
}
return tokenInfo
}
func getYLYTokenFromRemote(oldToken string) (tokenInfo *syseventhub.TokenInfo) { func getYLYTokenFromRemote(oldToken string) (tokenInfo *syseventhub.TokenInfo) {
if !globals.IsMainProductEnv() && globals.GetWeixinTokenKey != "" && globals.GetYLYTokenURL != "" { if !globals.IsMainProductEnv() && globals.GetWeixinTokenKey != "" && globals.GetYLYTokenURL != "" {
tokenInfo = PollingRemotEvent(globals.GetYLYTokenURL, 0, map[string]interface{}{ tokenInfo = PollingRemotEvent(globals.GetYLYTokenURL, 0, map[string]interface{}{

View File

@@ -14,6 +14,7 @@ const (
VendorIDMTWM = 1 VendorIDMTWM = 1
VendorIDELM = 2 VendorIDELM = 2
VendorIDEBAI = 3 VendorIDEBAI = 3
VendorIDYB = 4 //银豹
VendorIDWSC = 11 // 微盟微商城 VendorIDWSC = 11 // 微盟微商城
VendorIDPurchaseEnd = 11 VendorIDPurchaseEnd = 11
VendorIDJX = 9 // 这是一个假的京西VendorID VendorIDJX = 9 // 这是一个假的京西VendorID
@@ -45,6 +46,8 @@ const (
VendorIDAutonavi = 321 // 高德导航 VendorIDAutonavi = 321 // 高德导航
VendorIDQiNiuCloud = 323 // 七牛云 VendorIDQiNiuCloud = 323 // 七牛云
VendorIDShowAPI = 325 // 万维易源 VendorIDShowAPI = 325 // 万维易源
VendorIDJDWL = 401 //京东物流
) )
type VendorInfo struct { type VendorInfo struct {
@@ -65,6 +68,7 @@ var (
VendorIDELM: "Elm", VendorIDELM: "Elm",
VendorIDEBAI: "Ebai", VendorIDEBAI: "Ebai",
VendorIDWSC: "Wsc", VendorIDWSC: "Wsc",
VendorIDYB: "YinBao",
VendorIDJX: "Jx", VendorIDJX: "Jx",
VendorIDDada: "Dada", VendorIDDada: "Dada",
@@ -90,11 +94,13 @@ var (
VendorIDMTWM: "美团外卖", VendorIDMTWM: "美团外卖",
VendorIDELM: "饿了么", VendorIDELM: "饿了么",
VendorIDEBAI: "饿百新零售", VendorIDEBAI: "饿百新零售",
VendorIDYB: "银豹",
VendorIDWSC: "微盟微商城", VendorIDWSC: "微盟微商城",
VendorIDJX: "京西商城", VendorIDJX: "京西商城",
VendorIDDada: "达达众包", VendorIDDada: "达达众包",
VendorIDMTPS: "美团配送", VendorIDMTPS: "美团配送",
VendorIDJDWL: "京东物流",
VendorIDFeiE: "飞鹅", VendorIDFeiE: "飞鹅",
VendorIDXiaoWM: "外卖管家", VendorIDXiaoWM: "外卖管家",

View File

@@ -138,6 +138,7 @@ var (
"Login": "登录", "Login": "登录",
"RegisterUser": "注册", "RegisterUser": "注册",
"AutoPayForPopluarMan": "每日订单打款", "AutoPayForPopluarMan": "每日订单打款",
"SyncStoresQualify": "上传门店营业资质",
} }
MultiStoresVendorMap = map[int]int{ MultiStoresVendorMap = map[int]int{

View File

@@ -26,7 +26,9 @@ type StoresOrderSaleInfo struct {
SalePrice int64 `json:"salePrice"` SalePrice int64 `json:"salePrice"`
ActualPayPrice int64 `json:"actualPayPrice"` ActualPayPrice int64 `json:"actualPayPrice"`
EarningPrice int64 `json:"earningPrice"` // 预估结算给门店老板的钱 EarningPrice int64 `json:"earningPrice"` // 预估结算给门店老板的钱
NewEarningPrice int64 `json:"newEarningPrice"` // 预估结算给门店老板的钱(新规则)
DistanceFreightMoney int64 `json:"distanceFreightMoney"` // 商户承担的远距离配送费(当前只有京东到家有值) DistanceFreightMoney int64 `json:"distanceFreightMoney"` // 商户承担的远距离配送费(当前只有京东到家有值)
WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费 WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费
} }
@@ -41,7 +43,8 @@ type OrderSkuWithActualPayPrice struct {
StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid
Status int `json:"status"` // 参见OrderStatus*相关的常量定义 Status int `json:"status"` // 参见OrderStatus*相关的常量定义
PayPercentage int `json:"payPercentage"` PayPercentage int `json:"payPercentage"`
NewEarningPrice int64 `json:"newEarningPrice"`
} }
type tGoodsAndOrder struct { type tGoodsAndOrder struct {
@@ -356,7 +359,7 @@ func GetStoreOrderSkuList(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAt
// order_finished_at // order_finished_at
sql := ` sql := `
SELECT t1.*, SELECT t1.*,
IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) store_id, t2.status, t2.actual_pay_price, t2.distance_freight_money, t2.waybill_tip_money, IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) store_id, t2.status, t2.actual_pay_price, t2.distance_freight_money, t2.waybill_tip_money, t2.new_earning_price,
t3.pay_percentage t3.pay_percentage
FROM order_sku t1 FROM order_sku t1
JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id
@@ -386,7 +389,7 @@ func GetStoreOrderSkuList(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAt
func GetStoreOrderSkuList4Afs(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAtEnd time.Time, isFinish bool) (skuList []*OrderSkuWithActualPayPrice, err error) { func GetStoreOrderSkuList4Afs(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAtEnd time.Time, isFinish bool) (skuList []*OrderSkuWithActualPayPrice, err error) {
sql := ` sql := `
SELECT t1.*, SELECT t1.*,
t2.actual_pay_price, t2.status, IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) store_id, t2.actual_pay_price, t2.status, IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) store_id, t2.new_earning_price,
t3.pay_percentage t3.pay_percentage
FROM order_sku t1 FROM order_sku t1
JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id
@@ -1231,3 +1234,28 @@ func GetOrdersForJxPay(db *DaoDB, finishTimeBegin, finishTimeEnd time.Time) (goo
err = GetRows(db, &goods, sql, sqlParams...) err = GetRows(db, &goods, sql, sqlParams...)
return goods, err return goods, err
} }
func GetWaybills(db *DaoDB, vendorOrderID string) (waybills []*model.Waybill, err error) {
sql := `SELECT *
FROM waybill
WHERE vendor_order_id = ?
`
sqlParams := []interface{}{vendorOrderID}
err = GetRows(db, &waybills, sql, sqlParams)
return waybills, err
}
func GetMatterChildOrders(db *DaoDB, vendorOrderID string) (goods []*model.GoodsOrder, err error) {
sql := `SELECT *
FROM goods_order
WHERE vendor_order_id LIKE ? OR vendor_order_id LIKE ?
AND vendor_id = ?
ORDER BY vendor_order_id DESC
`
sqlParams := []interface{}{
vendorOrderID + "0%", vendorOrderID + "1%",
model.VendorIDJX,
}
err = GetRows(db, &goods, sql, sqlParams)
return goods, err
}

View File

@@ -307,7 +307,7 @@ func GetPriceReferSnapshot(db *DaoDB, cityCodes, skuIDs []int, skuNameID int, sn
totalCount = GetLastTotalRowCount(db) totalCount = GetLastTotalRowCount(db)
} }
for _, v := range priceReferSnapshot { for _, v := range priceReferSnapshot {
skuList, err2 := GetSkus(db, []int{v.SkuID}, nil, nil, nil) skuList, err2 := GetSkus(db, []int{v.SkuID}, nil, nil, nil, nil)
err = err2 err = err2
if len(skuList) > 0 { if len(skuList) > 0 {
skuAndName := skuList[0] skuAndName := skuList[0]

View File

@@ -76,7 +76,7 @@ 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 GetSkus(db *DaoDB, skuIDs, nameIDs, statuss, catIDs []int) (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 SELECT t1.*, t2.name, t2.unit, t2.prefix, t2.is_spu, t2.ex_prefix, t2.ex_prefix_begin, t2.ex_prefix_end
FROM sku t1 FROM sku t1
@@ -110,6 +110,10 @@ func GetSkus(db *DaoDB, skuIDs, nameIDs, statuss, catIDs []int) (skuList []*mode
sqlWhere += " OR t3p.id IN (" + GenQuestionMarks(len(catIDs)) + ") )" sqlWhere += " OR t3p.id IN (" + GenQuestionMarks(len(catIDs)) + ") )"
sqlParams = append(sqlParams, catIDs, catIDs) sqlParams = append(sqlParams, catIDs, catIDs)
} }
if len(eclpIDs) > 0 {
sqlWhere += " AND t1.eclp_id IN (" + GenQuestionMarks(len(eclpIDs)) + ")"
sqlParams = append(sqlParams, eclpIDs)
}
sql += sqlWhere sql += sqlWhere
if err = GetRows(db, &skuList, sql, sqlParams...); err == nil { if err = GetRows(db, &skuList, sql, sqlParams...); err == nil {
return skuList, nil return skuList, nil
@@ -137,7 +141,7 @@ func GetSkuNames(db *DaoDB, nameIDs []int) (skuNameList []*model.SkuName, err er
} }
func GetSkuIDByNames(db *DaoDB, nameIDs []int) (skuIDs []int, err error) { func GetSkuIDByNames(db *DaoDB, nameIDs []int) (skuIDs []int, err error) {
skuList, err := GetSkus(db, nil, nameIDs, nil, nil) skuList, err := GetSkus(db, nil, nameIDs, nil, nil, nil)
if err == nil { if err == nil {
for _, sku := range skuList { for _, sku := range skuList {
skuIDs = append(skuIDs, sku.ID) skuIDs = append(skuIDs, sku.ID)
@@ -147,7 +151,7 @@ func GetSkuIDByNames(db *DaoDB, nameIDs []int) (skuIDs []int, err error) {
} }
func GetSkuByCats(db *DaoDB, catIDs []int) (skuList []*model.Sku, err error) { func GetSkuByCats(db *DaoDB, catIDs []int) (skuList []*model.Sku, err error) {
skuExList, err := GetSkus(db, nil, nil, nil, catIDs) skuExList, err := GetSkus(db, nil, nil, nil, catIDs, nil)
if err == nil { if err == nil {
for _, v := range skuExList { for _, v := range skuExList {
skuList = append(skuList, &v.Sku) skuList = append(skuList, &v.Sku)

View File

@@ -45,6 +45,7 @@ type StoreDetail struct {
OperatorName3 string `json:"operatorName3"` OperatorName3 string `json:"operatorName3"`
JdStoreLevel string `json:"jdStoreLevel"` //京东门店等级 JdStoreLevel string `json:"jdStoreLevel"` //京东门店等级
IsOrder int `json:"isOrder"` //是否是下预订单门店
} }
// 带快递门店信息的 // 带快递门店信息的
@@ -88,7 +89,7 @@ func getStoreDetail(db *DaoDB, storeID, vendorID int, vendorStoreID string) (sto
sql := ` sql := `
SELECT t1.*, SELECT t1.*,
t2.vendor_store_id, t2.status vendor_status, t2.delivery_fee_deduction_sill, t2.delivery_fee_deduction_fee, t2.sync_status, t2.vendor_org_code, t2.vendor_store_id, t2.status vendor_status, t2.delivery_fee_deduction_sill, t2.delivery_fee_deduction_fee, t2.sync_status, t2.vendor_org_code,
t2.price_percentage, t2.auto_pickup, t2.delivery_type, t2.delivery_competition, t2.is_sync, t2.vendor_store_name, t2.price_percentage, t2.auto_pickup, t2.delivery_type, t2.delivery_competition, t2.is_sync, t2.vendor_store_name, t2.is_order,
t3.value price_percentage_pack_str, t3.value price_percentage_pack_str,
t4.value freight_deduction_pack_str, t4.value freight_deduction_pack_str,
district.name district_name, district.name district_name,

View File

@@ -148,6 +148,7 @@ type StoreSkuNameExt struct {
PendingOpType int8 `json:"pendingOpType"` // 取值同 StoreOpRequest.Type PendingOpType int8 `json:"pendingOpType"` // 取值同 StoreOpRequest.Type
PendingUnitPrice int `json:"pendingUnitPrice"` // 这个是待审核的价格申请 PendingUnitPrice int `json:"pendingUnitPrice"` // 这个是待审核的价格申请
RealMidUnitPrice int `json:"realMidUnitPrice"` RealMidUnitPrice int `json:"realMidUnitPrice"`
Count int `json:"count"`
} }
// GetStoreSkus用 // GetStoreSkus用
@@ -232,6 +233,8 @@ type StoreSkuExt struct {
EarningPrice int `json:"earningPrice"` EarningPrice int `json:"earningPrice"`
EarningActID int `orm:"column(earning_act_id)" json:"earningActID"` EarningActID int `orm:"column(earning_act_id)" json:"earningActID"`
EclpID string `orm:"column(eclp_id)" json:"eclpID"`
} }
type SkuNameAndPlace struct { type SkuNameAndPlace struct {
@@ -967,7 +970,7 @@ func GetStoreSkusByNameIDs(db *DaoDB, storeIDs []int, nameID int) (skuList []*St
func GetTopSkusByStoreIDs(db *DaoDB, storeIDs []int) (storeSkuNameExt []*StoreSkuNameExt, err error) { func GetTopSkusByStoreIDs(db *DaoDB, storeIDs []int) (storeSkuNameExt []*StoreSkuNameExt, err error) {
sql := ` sql := `
SELECT 1 s, t1.count, t2.id sku_id, t3.*, t1.store_id, t1.store_name SELECT t1.count, t2.id sku_id, t3.*, t1.store_id, t1.store_name
FROM( FROM(
SELECT SUM(b.count) count,c.id,a.store_id,d.name store_name SELECT SUM(b.count) count,c.id,a.store_id,d.name store_name
FROM goods_order a FROM goods_order a
@@ -995,8 +998,8 @@ func GetTopSkusByStoreIDs(db *DaoDB, storeIDs []int) (storeSkuNameExt []*StoreSk
GROUP BY 2,3,4)t1 GROUP BY 2,3,4)t1
JOIN sku t2 ON t2.id = t1.id JOIN sku t2 ON t2.id = t1.id
JOIN sku_name t3 ON t3.id = t2.name_id JOIN sku_name t3 ON t3.id = t2.name_id
UNION ALL UNION
SELECT 2 s, 0 count, a.sku_id, g.*, a.store_id, e.name store_name SELECT 0 count, a.sku_id, g.*, a.store_id, e.name store_name
FROM store_sku_bind a FROM store_sku_bind a
LEFT JOIN act_store_sku b ON a.store_id = b.store_id AND b.sku_id = a.sku_id LEFT JOIN act_store_sku b ON a.store_id = b.store_id AND b.sku_id = a.sku_id
LEFT JOIN act_map c ON c.act_id = b.act_id LEFT JOIN act_map c ON c.act_id = b.act_id
@@ -1017,7 +1020,7 @@ func GetTopSkusByStoreIDs(db *DaoDB, storeIDs []int) (storeSkuNameExt []*StoreSk
AND a.status = ? AND a.status = ?
AND a.deleted_at = ? AND a.deleted_at = ?
AND (d.type = ? OR d.type = ?) AND (d.type = ? OR d.type = ?)
ORDER BY 1,2 DESC ORDER BY 1 DESC
LIMIT ? LIMIT ?
` `
sqlParams = append(sqlParams, model.StoreSkuBindStatusNormal, utils.DefaultTimeValue, model.ActSkuDirectDown, model.ActSkuSecKill, 30) sqlParams = append(sqlParams, model.StoreSkuBindStatusNormal, utils.DefaultTimeValue, model.ActSkuDirectDown, model.ActSkuSecKill, 30)

View File

@@ -11,7 +11,7 @@ type OperateEvent struct {
APIFunction string `orm:"column(api_function)" json:"apiFunction"` APIFunction string `orm:"column(api_function)" json:"apiFunction"`
JsonData string `orm:"size(3200)" json:"jsonData"` JsonData string `orm:"size(3200)" json:"jsonData"`
ErrCode string `orm:"size(32)" json:"errCode"` ErrCode string `orm:"size(32)" json:"errCode"`
ErrMsg string `orm:"size(3200)" json:"errMsg"` ErrMsg string `orm:"size(9999)" json:"errMsg"`
UseTime int `json:"useTime"` UseTime int `json:"useTime"`
} }

View File

@@ -7,6 +7,7 @@ const (
ConfigTypeBank = "Bank" ConfigTypeBank = "Bank"
ConfigTypeRole = "Role" ConfigTypeRole = "Role"
ConfigTypeJxStore = "JxStore" ConfigTypeJxStore = "JxStore"
ConfigTypeCookie = "Cookie"
) )
const ( const (
@@ -24,6 +25,7 @@ var (
ConfigTypeBank: "银行", ConfigTypeBank: "银行",
ConfigTypeRole: "角色", ConfigTypeRole: "角色",
ConfigTypeJxStore: "京西商城", ConfigTypeJxStore: "京西商城",
ConfigTypeCookie: "Cookie",
} }
) )

View File

@@ -10,6 +10,7 @@ const (
const ( const (
PayTypeWX = 1 // 微信支付 PayTypeWX = 1 // 微信支付
PayTypeTL = 2 // 通联宝支付
PayStatusNo = 0 PayStatusNo = 0
PayStatusYes = 1 PayStatusYes = 1
@@ -63,6 +64,7 @@ type GoodsOrder struct {
DistanceFreightMoney int64 `json:"distanceFreightMoney"` // 商户承担的远距离配送费(当前只有京东到家有值) DistanceFreightMoney int64 `json:"distanceFreightMoney"` // 商户承担的远距离配送费(当前只有京东到家有值)
WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费 WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费
EarningPrice int64 `json:"earningPrice"` // 结算给门店老板的钱(未扣除可能的三方配送费) EarningPrice int64 `json:"earningPrice"` // 结算给门店老板的钱(未扣除可能的三方配送费)
NewEarningPrice int64 `json:"newEarningPrice"` // 结算给门店老板的钱(未扣除可能的三方配送费)(新规则)
Weight int `json:"weight"` // 单位为克 Weight int `json:"weight"` // 单位为克
VendorUserID string `orm:"column(vendor_user_id);size(48)" json:"vendorUserID"` VendorUserID string `orm:"column(vendor_user_id);size(48)" json:"vendorUserID"`
UserID string `orm:"column(user_id);size(48);index" json:"userID"` UserID string `orm:"column(user_id);size(48);index" json:"userID"`
@@ -102,6 +104,9 @@ type GoodsOrder struct {
InvoiceTaxerID string `orm:"size(32);column(invoice_taxer_id)" json:"invoiceTaxerID"` // 发票纳税人识别码 InvoiceTaxerID string `orm:"size(32);column(invoice_taxer_id)" json:"invoiceTaxerID"` // 发票纳税人识别码
InvoiceEmail string `orm:"size(64)" json:"invoiceEmail"` // 发票邮箱 InvoiceEmail string `orm:"size(64)" json:"invoiceEmail"` // 发票邮箱
VendorOrgCode string `orm:"size(64)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空 VendorOrgCode string `orm:"size(64)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空
FromStoreID int `orm:"column(from_store_id)" json:"fromStoreID"` //物料配送门店
EclpOutID string `orm:"column(eclp_out_id)" json:"eclpOutID"` //物料配送的出库单号
AddressID int64 `orm:"column(address_id)" json:"addressID"` //配送地址ID
// 以下只是用于传递数据 // 以下只是用于传递数据
OriginalData string `orm:"-" json:"-"` OriginalData string `orm:"-" json:"-"`
@@ -317,7 +322,7 @@ type OrderPay struct {
PrepayID string `orm:"column(prepay_id);index;size(48)" json:"prepayID"` // 下单后支付前支付方生成的事务ID PrepayID string `orm:"column(prepay_id);index;size(48)" json:"prepayID"` // 下单后支付前支付方生成的事务ID
TransactionID string `orm:"column(transaction_id);index;size(48)" json:"transactionID"` // 支付成功后支付方生成的事务ID TransactionID string `orm:"column(transaction_id);index;size(48)" json:"transactionID"` // 支付成功后支付方生成的事务ID
CodeURL string `orm:"column(code_url);size(256)" json:"codeURL"` CodeURL string `orm:"column(code_url);size(3200)" json:"codeURL"`
OriginalData string `orm:"type(text)" json:"-"` OriginalData string `orm:"type(text)" json:"-"`
} }

View File

@@ -228,8 +228,9 @@ type Sku struct {
Status int `json:"status"` Status int `json:"status"`
Seq int `json:"seq"` Seq int `json:"seq"`
ExdSkuID string `orm:"column(exd_sku_id)" json:"exdSkuID"` ExdSkuID string `orm:"column(exd_sku_id)" json:"exdSkuID"` //饿鲜达商品ID
ExdCategoryThirdID int `orm:"column(exd_category_third_id)" json:"exdCategoryThirdID"` ExdCategoryThirdID int `orm:"column(exd_category_third_id)" json:"exdCategoryThirdID"`
EclpID string `orm:"column(eclp_id)" json:"eclpID"` //eclp物料商品ID
// JdID int64 `orm:"column(jd_id);null;index" json:"jdID"` // JdID int64 `orm:"column(jd_id);null;index" json:"jdID"`
// JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"` // JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
@@ -281,9 +282,10 @@ type SkuWithVendor struct {
type SkuNameExt struct { type SkuNameExt struct {
SkuName SkuName
Skus []*SkuWithVendor `orm:"-" json:"skus"` Skus []*SkuWithVendor `orm:"-" json:"skus"`
SkusStr string `json:"-"` SkusStr string `json:"-"`
FullName string `json:"fullName"` FullName string `json:"fullName"`
Places []int `orm:"-" json:"places"` Places []int `orm:"-" json:"places"`
PlacesStr string `json:"-"` PlacesStr string `json:"-"`
MidUnitPrice int `json:"midUnitPrice"`
} }

View File

@@ -56,7 +56,8 @@ const (
) )
const ( const (
ExdStoreName = "饿鲜达" ExdStoreName = "饿鲜达"
MatterStoreID = 666666
) )
var ( var (
@@ -278,7 +279,8 @@ type Store struct {
Status int `json:"status"` Status int `json:"status"`
AutoEnableAt *time.Time `orm:"type(datetime);null" json:"autoEnableAt"` // 自动营业时间(临时休息用) AutoEnableAt *time.Time `orm:"type(datetime);null" json:"autoEnableAt"` // 自动营业时间(临时休息用)
ChangePriceType int8 `json:"changePriceType"` // 修改价格类型,即是否需要审核 ChangePriceType int8 `json:"changePriceType"` // 修改价格类型,即是否需要审核
SMSNotify int8 `orm:"column(sms_notify);" json:"smsNotify"` // 是否通过短信接收订单消息 SMSNotify int8 `orm:"column(sms_notify);" json:"smsNotify"` // 是否通过短信接收订单消息(每天只推一条)
SMSNotifyMark int8 `orm:"column(sms_notify_mark);" json:"smsNotifyMark"` //今天是否已经推送过订单消息
AutoReplyType int8 `json:"autoReplyType"` // 订单评价自动回复类型 AutoReplyType int8 `json:"autoReplyType"` // 订单评价自动回复类型
LinkStoreID int `orm:"column(link_store_id);default(0);index" json:"linkStoreID"` // 关联门店ID LinkStoreID int `orm:"column(link_store_id);default(0);index" json:"linkStoreID"` // 关联门店ID
@@ -418,6 +420,8 @@ type StoreMap struct {
FakeOpenStart int16 `orm:"default(0)" json:"fakeOpenStart"` // 假开店开始 FakeOpenStart int16 `orm:"default(0)" json:"fakeOpenStart"` // 假开店开始
FakeOpenStop int16 `orm:"default(0)" json:"fakeOpenStop"` // 假开店结束 FakeOpenStop int16 `orm:"default(0)" json:"fakeOpenStop"` // 假开店结束
JdStoreLevel string `orm:"size(32)" json:"jdStoreLevel"` //京东门店等级 JdStoreLevel string `orm:"size(32)" json:"jdStoreLevel"` //京东门店等级
IsOrder int `orm:"default(0)" json:"isOrder"` //是否是下预订单门店
} }
func (*StoreMap) TableUnique() [][]string { func (*StoreMap) TableUnique() [][]string {

View File

@@ -134,6 +134,24 @@ func (*StoreSkuBind) TableIndex() [][]string {
} }
} }
type StoreSkuBindHistory struct {
StoreSkuBind
StoreSkuBindID int `orm:"column(store_sku_bind_id)"`
SnapshotAt time.Time `orm:"type(datetime);null;index" json:"snapshotAt"`
}
func (*StoreSkuBindHistory) TableUnique() [][]string {
return [][]string{
[]string{"StoreID", "SkuID", "DeletedAt", "SnapshotAt"},
}
}
func (*StoreSkuBindHistory) TableIndex() [][]string {
return [][]string{
[]string{"SkuID", "StoreID", "DeletedAt"},
}
}
type StoreOpRequest struct { type StoreOpRequest struct {
ModelIDCULD // DeletedAt用于表示请求操作结束而并不一定是删除 ModelIDCULD // DeletedAt用于表示请求操作结束而并不一定是删除

View File

@@ -480,6 +480,7 @@ func (c *PurchaseHandler) SyncQualify(ctx *jxcontext.Context, storeDetail *dao.S
} }
globals.SugarLogger.Debug(utils.Format4Output(qualifyList, false)) globals.SugarLogger.Debug(utils.Format4Output(qualifyList, false))
if globals.EnableJdStoreWrite { if globals.EnableJdStoreWrite {
globals.SugarLogger.Debugf("SaveQualifyTest4,[%v]", utils.Format4Output(qualifyList, false))
err = api.JdPageAPI.SaveQualify(storeDetail.VendorStoreID, jdapi.SaveQualifyActionTypeCommit, qualifyList) err = api.JdPageAPI.SaveQualify(storeDetail.VendorStoreID, jdapi.SaveQualifyActionTypeCommit, qualifyList)
// err = api.JdPageAPI.SaveQualify(storeDetail.VendorStoreID, jdapi.SaveQualifyActionTypeSave, qualifyList) // err = api.JdPageAPI.SaveQualify(storeDetail.VendorStoreID, jdapi.SaveQualifyActionTypeSave, qualifyList)
} }

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,185 @@
package localjx
import (
"encoding/json"
"fmt"
"strings"
"time"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/baseapi/platformapi/tonglianpayapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin"
"git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/globals/api"
)
func pay4OrderByTL(ctx *jxcontext.Context, order *model.GoodsOrder, vendorPayType string) (orderPay *model.OrderPay, err error) {
if order.FromStoreID != 0 {
result, _ := orderman.GetMatterStoreOrderCount(nil, order.FromStoreID)
if !result.Flag {
return nil, fmt.Errorf("该门店[%v]已在一周内申请过物料,请勿重复申请!", order.FromStoreID)
}
}
payCreatedAt := time.Now()
param := &tonglianpayapi.CreateUnitorderOrderParam{
Trxamt: int(order.ActualPayPrice),
NotifyUrl: globals.TLPayNotifyURL,
Reqsn: order.VendorOrderID,
PayType: vendorPayType,
}
//暂时做兼容处理
if vendorPayType == "JSAPI" {
param.PayType = tonglianpayapi.PayTypeWxXcx
}
if vendorPayType == tonglianpayapi.PayTypeWxXcx {
if authInfo, err := ctx.GetV2AuthInfo(); err == nil && authInfo.GetAuthType() == weixin.AuthTypeMini {
param.Acct = authInfo.GetAuthID()
}
}
if vendorPayType == tonglianpayapi.PayTypeH5 {
param2 := &tonglianpayapi.CreateH5UnitorderOrderParam{
Trxamt: int(order.ActualPayPrice),
NotifyUrl: globals.TLPayNotifyURL,
Body: "京西菜市",
Charset: "UTF-8",
}
err = api.TLpayAPI.CreateH5UnitorderOrder(param2)
} else {
result, err := api.TLpayAPI.CreateUnitorderOrder(param)
if err == nil {
var result2 tonglianpayapi.PayInfo
json.Unmarshal([]byte(result.PayInfo), &result2)
prePayID := result2.Package[strings.LastIndex(result2.Package, "=")+1 : len(result2.Package)]
orderPay = &model.OrderPay{
PayOrderID: param.Reqsn,
PayType: model.PayTypeTL,
VendorPayType: vendorPayType,
TransactionID: result.TrxID,
VendorOrderID: order.VendorOrderID,
VendorID: order.VendorID,
Status: 0,
PayCreatedAt: payCreatedAt,
PrepayID: prePayID,
CodeURL: utils.LimitUTF8StringLen(result.PayInfo, 3200),
TotalFee: int(order.ActualPayPrice),
}
}
}
return orderPay, err
}
func OnTLPayCallback(call *tonglianpayapi.CallBackResult) (err error) {
globals.SugarLogger.Debugf("OnTLPayCallback msg:%s", utils.Format4Output(call, true))
switch call.TrxCode {
case tonglianpayapi.MsgTypePay:
err = onTLpayFinished(call)
case tonglianpayapi.MsgTypeRefund:
err = onTLpayRefund(call)
}
return err
}
func onTLpayFinished(call *tonglianpayapi.CallBackResult) (err error) {
orderPay := &model.OrderPay{
PayOrderID: call.CusorderID,
PayType: model.PayTypeTL,
}
orderPay.DeletedAt = utils.DefaultTimeValue
db := dao.GetDB()
if err = dao.GetEntity(db, orderPay, "PayOrderID", "PayType", "DeletedAt"); err == nil {
if orderPay.Status != 0 {
globals.SugarLogger.Debugf("already pay msg:%s, err:%v", utils.Format4Output(call, true), err)
return err
}
loc, _ := time.LoadLocation("Local")
t1, _ := time.ParseInLocation("20060102150405", call.PayTime, loc)
orderPay.PayFinishedAt = utils.Time2Pointer(t1)
// orderPay.TransactionID = call.ChnlTrxID
orderPay.OriginalData = utils.Format4Output(call, true)
if call.TrxStatus == tonglianpayapi.TrxStatusSuccess {
orderPay.Status = model.PayStatusYes
} else {
orderPay.Status = model.PayStatusFailed
}
dao.UpdateEntity(db, orderPay)
if call.TrxStatus == tonglianpayapi.TrxStatusSuccess {
err = OnPayFinished(orderPay)
}
} else {
globals.SugarLogger.Debugf("onTLpayFinished msg:%s, err:%v", utils.Format4Output(call, true), err)
}
return err
}
func onTLpayRefund(call *tonglianpayapi.CallBackResult) (err error) {
orderPayRefund := &model.OrderPayRefund{
RefundID: call.CusorderID,
}
db := dao.GetDB()
if err = dao.GetEntity(db, orderPayRefund, "RefundID"); err == nil {
if call.TrxStatus == tonglianpayapi.TrxStatusSuccess {
orderPayRefund.Status = model.RefundStatusYes
} else {
orderPayRefund.Status = model.RefundStatusFailed
}
orderPayRefund.OriginalData = utils.Format4Output(call, true)
dao.UpdateEntity(db, orderPayRefund)
} else if dao.IsNoRowsError(err) {
globals.SugarLogger.Warnf("收到异常的退款事件, call:%s", utils.Format4Output(call, true))
}
orderPay := &model.OrderPay{
VendorOrderID: orderPayRefund.VendorOrderID,
VendorID: jxutils.GetPossibleVendorIDFromVendorOrderID(orderPayRefund.VendorOrderID),
PayType: model.PayTypeWX,
Status: model.PayStatusYes,
}
orderPay.DeletedAt = utils.DefaultTimeValue
if err = dao.GetEntity(db, orderPay, "VendorOrderID", "VendorID", "PayType", "Status", "DeletedAt"); err == nil {
orderPay.Status = model.PayStatusRefund
dao.UpdateEntity(db, orderPay)
}
return err
}
func refundOrderByTL(ctx *jxcontext.Context, orderPay *model.OrderPay, refundID string, refundFee int, refundDesc string) (orderPayRefund *model.OrderPayRefund, err error) {
result, err := api.TLpayAPI.PayRefund(&tonglianpayapi.PayRefundParam{
Trxamt: orderPay.TotalFee,
Reqsn: utils.GetUUID(),
// OldReqsn: orderPay.VendorOrderID,
Remark: refundDesc,
OldTrxID: orderPay.TransactionID,
})
if err == nil {
orderPayRefund = &model.OrderPayRefund{
RefundID: refundID,
VendorRefundID: result.TrxID,
VendorOrderID: orderPay.VendorOrderID,
VendorID: orderPay.VendorID,
Status: model.RefundStatusNo,
TransactionID: orderPay.TransactionID,
RefundFee: orderPay.TotalFee,
RefundCreatedAt: time.Now(),
}
dao.WrapAddIDCULDEntity(orderPayRefund, ctx.GetUserName())
db := dao.GetDB()
if result.TrxStatus == tonglianpayapi.TrxStatusSuccess {
orderPayRefund.Status = model.RefundStatusYes
} else {
orderPayRefund.Status = model.RefundStatusFailed
}
orderPayRefund.OriginalData = utils.Format4Output(result, true)
dao.CreateEntity(db, orderPayRefund)
orderPay.Status = model.PayStatusRefund
dao.UpdateEntity(db, orderPay)
}
return orderPayRefund, err
}

View File

@@ -117,6 +117,9 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
if storeDetail.VendorStoreName != "" { if storeDetail.VendorStoreName != "" {
name = storeDetail.VendorStoreName name = storeDetail.VendorStoreName
} }
// else {
// name = jxutils.ComposeStoreName(storeDetail.Store.Name, model.VendorIDMTWM)
// }
} }
// openLevel, isOnline := bizStatusJX2Mtwm(mergedStoreStatus) // openLevel, isOnline := bizStatusJX2Mtwm(mergedStoreStatus)
params := map[string]interface{}{ params := map[string]interface{}{

View File

@@ -40,7 +40,7 @@ func updateFoodRecipeItemAndStep(ctx *jxcontext.Context, db *dao.DaoDB, recipeID
if len(v.SkuIDs) == 0 { if len(v.SkuIDs) == 0 {
return fmt.Errorf("SkuIDs必须要有值") return fmt.Errorf("SkuIDs必须要有值")
} }
skuIDs, err2 := dao.GetSkus(db, v.SkuIDs, nil, nil, nil) skuIDs, err2 := dao.GetSkus(db, v.SkuIDs, nil, nil, nil, nil)
if err = err2; err != nil { if err = err2; err != nil {
return err return err
} }

View File

@@ -15,7 +15,7 @@ dadaAppSecret = "7f97d8f258b70b450f04e7ab274ed8f8"
mtwmAppID = "589" mtwmAppID = "589"
mtwmSecret = "a81eb3df418d83d6a1a4b7c572156d2f" mtwmSecret = "a81eb3df418d83d6a1a4b7c572156d2f"
mtwmCallbackURL = "http://callback.jxc4.com" mtwmCallbackURL = "http://callback.jxc4.com"
mtwmCookieStr = "_lxsdk_cuid=16ddced5e9a95-0a65869c427a14-48714616-15f900-16ddced5e9b2b; _hc.v=cfebbfd1-79a7-9823-d8df-77e59646cb34.1571369610; _lxsdk=16ddced5e9a95-0a65869c427a14-48714616-15f900-16ddced5e9b2b; uuid_update=true; uuid=7b28e71504f5414e382b.1579155871.1.0.0; device_uuid=!64dedf83-b510-4910-8a31-b2b13d0bdd73; pushToken=00kRvxlerO15kB0dJFWDwYuctAoe04xGMNd0r3BqvLUA*; acctId=57396785; brandId=-1; wmPoiId=-1; isOfflineSelfOpen=0; city_id=0; isChain=1; existBrandPoi=true; ignore_set_router_proxy=true; region_id=; region_version=0; newCategory=false; bsid=OyqgRLyV54i9JKP0zRCI9jPyXc4UBU-6KReDAkPIwSlljhb97JPyFUIXfYQvhlJb6G1erzHQKbvtZ2pSWOYDxQ; cityId=510100; provinceId=510000; city_location_id=0; location_id=0; igateApp=shangouepc; wpush_server_url=wss://wpush.meituan.com; token=0MScAPaSa57iwRpgpCmGLf21tiA4yU4Uy-nDZlv8wNWs*; shopCategory=food; set_info=%7B%22wmPoiId%22%3A-1%2C%22ignoreSetRouterProxy%22%3Atrue%7D; JSESSIONID=105dgww27nsy6yfp68q7wmcni; LX_SC_CONSTANT=c_shangou_online_e_znrurnrc; _lxsdk_s=17041b590ac-3d-689-a8c%7C%7C15" # mtwmCookieStr = "_lxsdk_cuid=16ddced5e9a95-0a65869c427a14-48714616-15f900-16ddced5e9b2b; _hc.v=cfebbfd1-79a7-9823-d8df-77e59646cb34.1571369610; _lxsdk=16ddced5e9a95-0a65869c427a14-48714616-15f900-16ddced5e9b2b; uuid_update=true; uuid=7b28e71504f5414e382b.1579155871.1.0.0; device_uuid=!64dedf83-b510-4910-8a31-b2b13d0bdd73; pushToken=00kRvxlerO15kB0dJFWDwYuctAoe04xGMNd0r3BqvLUA*; acctId=57396785; brandId=-1; wmPoiId=-1; isOfflineSelfOpen=0; city_id=0; isChain=1; existBrandPoi=true; ignore_set_router_proxy=true; region_id=; region_version=0; newCategory=false; bsid=OyqgRLyV54i9JKP0zRCI9jPyXc4UBU-6KReDAkPIwSlljhb97JPyFUIXfYQvhlJb6G1erzHQKbvtZ2pSWOYDxQ; cityId=510100; provinceId=510000; city_location_id=0; location_id=0; igateApp=shangouepc; wpush_server_url=wss://wpush.meituan.com; token=0MScAPaSa57iwRpgpCmGLf21tiA4yU4Uy-nDZlv8wNWs*; shopCategory=food; set_info=%7B%22wmPoiId%22%3A-1%2C%22ignoreSetRouterProxy%22%3Atrue%7D; JSESSIONID=105dgww27nsy6yfp68q7wmcni; LX_SC_CONSTANT=c_shangou_online_e_znrurnrc; _lxsdk_s=17041b590ac-3d-689-a8c%7C%7C15"
autonaviKey = "ef64f638f31e05cb7bde28790f7309fe" autonaviKey = "ef64f638f31e05cb7bde28790f7309fe"
@@ -56,20 +56,25 @@ wxpayAppKey = "XKJPOIHJ233adf01KJIXlIeQDSDKFJAD"
wxpayAppMchID = "1390686702" wxpayAppMchID = "1390686702"
wxpayNotifyURL = "http://callback.test.jxc4.com/wxpay/msg/" wxpayNotifyURL = "http://callback.test.jxc4.com/wxpay/msg/"
tonglianPayAppID = "00183083"
tonglianPayKey = "18048531223"
tonglianPayCusID = "56065105499TVAH"
tonglianPayNotifyURL = "http://callback.test.jxc4.com/tonglian/msg/"
backstageHost = "http://www.jxc4.com" backstageHost = "http://www.jxc4.com"
wxBackstageHost = "http://wx.jxc4.com" wxBackstageHost = "http://wx.jxc4.com"
jdStorePageCookie = "YYJV3NHVBPHLD36FWP6F3EM5PTXJ2XZQS7U4HWRIDPP4IWGUKUIB4XG5N26CZRDLDF7PKOXBPD6BNTUAJLETLZOIWMCVFI3K6MYZIY4QBIXIMXYDJNUKFGJVQTN5356SAD6WPCIHWNQAG7DDMF7L7S3SHD6O37OTAHUCKU6ALXATYTGMHNFLM4XRLVSFUQAJR77M4URSZRKVO55243TDVXLO25PP4UYSPTTPMNRUFXDNP4WPE566Q6V4AH32F7HT" # jdStorePageCookie = "YYJV3NHVBPHLD36FWP6F3EM5PTXJ2XZQS7U4HWRIDPP4IWGUKUIB4XG5N26CZRDLDF7PKOXBPD6BNTUAJLETLZOIWMCVFI3K6MYZIY4QBIXIMXYDJNUKFGJVQTN5356SAD6WPCIHWNQAG7DDMF7L7S3SHD6O37OTAHUCKU6ALXATYTGMHNFLM4XRLVSFUQAJR77M4URSZRKVO55243TDVXLO25PP4UYSPTTPMNRUFXDNP4WPE566Q6V4AH32F7HT"
jd2StorePageCookie = "CK5GE5MR2UIOBOZC7BBZLLSI7MVDWPEQ4BRJTJQ2OP3ZFKYDDYTFFV4XOXKLERC2UXFT44TMCUMRFP3C25HD6W3PYONTQCOML6YIZA5Z37P62UXFE655IRGYJ4ZLQIEBYQM32FABIN5RVJYZWPQWSRTZURNRLYV57XJEDWZT5UVZRYUBTN3AT6JJJJ22YHE6ZHCN6LCH27JHSRO55YA6TJH6G54IF72X3UAXCKW5P2G2MT3U6I3527NQFMAFLHXBZKQFFMYUKUHUU4GZWD4O7GO45Y" # jd2StorePageCookie = "CK5GE5MR2UIOBOZC7BBZLLSI7MVDWPEQ4BRJTJQ2OP3ZFKYDDYTFFV4XOXKLERC2UXFT44TMCUMRFP3C25HD6W3PYONTQCOML6YIZA5Z37P62UXFE655IRGYJ4ZLQIEBYQM32FABIN5RVJYZWPQWSRTZURNRLYV57XJEDWZT5UVZRYUBTN3AT6JJJJ22YHE6ZHCN6LCH27JHSRO55YA6TJH6G54IF72X3UAXCKW5P2G2MT3U6I3527NQFMAFLHXBZKQFFMYUKUHUU4GZWD4O7GO45Y"
fakeJdToken = "ndslkv9asl@djf_n7askdjfk$" fakeJdToken = "ndslkv9asl@djf_n7askdjfk$"
fakeJdBaseURL = "http://test.jxc4.com/qqqq" fakeJdBaseURL = "http://test.jxc4.com/qqqq"
ebaiStorePageCookieWMUSS = "B0AAFQCAAAGbhkuMCsvcyYBDkkyAxBGIBlgXAQYVwc7VwYZFkx2HDoPSmo5eV1femopWgJRawhgAALG04cg1RUmhUakBbJRdgPS0tNEhnQhNRewwuWwYYBDEFPCQSDXV5YWA6PAVRHUJ9SnVGMThYAjNjLw9pRxIbS04-XFo05AQgBl%7ERLA33vWcR73gEAKZ" # ebaiStorePageCookieWMUSS = "B0AAFQCAAAGbhkuMCsvcyYBDkkyAxBGIBlgXAQYVwc7VwYZFkx2HDoPSmo5eV1femopWgJRawhgAALG04cg1RUmhUakBbJRdgPS0tNEhnQhNRewwuWwYYBDEFPCQSDXV5YWA6PAVRHUJ9SnVGMThYAjNjLw9pRxIbS04-XFo05AQgBl%7ERLA33vWcR73gEAKZ"
ebaiStorePageCookieWMSTOKEN = "gAALgNAAAGfBI5YEBHSQdZY1InIS8CVQU9aBU1f3VLWVQqKHAAAc5LnRLZ1QLLx0S5IuzCSX8ZQ7oUwAAUr-GEm9JpRc9AQAAsLkLHHXzuhh2lZkbyrcAAAWBESKg3ZA" # ebaiStorePageCookieWMSTOKEN = "gAALgNAAAGfBI5YEBHSQdZY1InIS8CVQU9aBU1f3VLWVQqKHAAAc5LnRLZ1QLLx0S5IuzCSX8ZQ7oUwAAUr-GEm9JpRc9AQAAsLkLHHXzuhh2lZkbyrcAAAWBESKg3ZA"
ebaiStorePageCookieWMUSS2 = "A8AAIcCAAADJhpNHQoGGjZaLFRBdnE7Uwp9TBQXH1o9RTBgP30NQiQmEEAwFVplbwc6wAAMXwsa082aRxJfzskPX9THj9RKgJ0TxE1fyYPZRYVH0YSSjFgARt8Shs3bVc3QHV2Eh94B24KO20vSlJEXnELcDxTl9sJ35T2Dvg21A3wCT0NMXaNAcPzKhPamv" # ebaiStorePageCookieWMUSS2 = "A8AAIcCAAADJhpNHQoGGjZaLFRBdnE7Uwp9TBQXH1o9RTBgP30NQiQmEEAwFVplbwc6wAAMXwsa082aRxJfzskPX9THj9RKgJ0TxE1fyYPZRYVH0YSSjFgARt8Shs3bVc3QHV2Eh94B24KO20vSlJEXnELcDxTl9sJ35T2Dvg21A3wCT0NMXaNAcPzKhPamv"
ebaiStorePageCookieWMSTOKEN2 = "A4AANwHAAARMA9ZWhh6BzcGYTQZJjVOHGIxPUdPVElXQz8iahGqiIS5gAAsLaD8yOwpYLCVMU2qqCEN8nAyiUQAAUr-GEu-F2xVbAQAAYcnZGrUx2Rf9qJkbRKQAAONp" # ebaiStorePageCookieWMSTOKEN2 = "A4AANwHAAARMA9ZWhh6BzcGYTQZJjVOHGIxPUdPVElXQz8iahGqiIS5gAAsLaD8yOwpYLCVMU2qqCEN8nAyiUQAAUr-GEu-F2xVbAQAAYcnZGrUx2Rf9qJkbRKQAAONp"
ebaiStorePageCookieExdTOKEN = "PBE_2.0_5cd1c6141c127d419e817e88920aa5ae01c164ed47b678e0b16c628ef65ffc0b93ddf4a7cd1f7172e644f4f5321c5f197dd406a5a0d219aae2fa169e59c5419db8f4d4ca44c01e112c6bb4f8d87cbae90e6eaefceba88f486f26bafa41f3ec181773c4b329a6c7c154333a8496509943c63a96c71c72edc82f6beb6ecd9acd5ad69b2f2bbcbe011d05536112cbe52be0b2176860870ce608a0d7f465a1e782f6584e4253aaaee30d9042f82f12b312b5a29151e2e0400f4a128ee365966025f9719278850f60e10ddda0e32554c6867091321cd552b41aa5e5e676f64af218a0e98e4030f499c31de664a0c0a23c5306075ffb061c7654d4646317c8e6a55c66361c96b9e8f11f55c2f666a0240a3f8fb8e221d58b907731a8720572a03febd20d146cad4b6a3821cfd3c5b3286bb3383c4eff8c8ff2d63b8773bbd88f2d6c4b1deb7634221b0e086b7b7d6201435dacdb09525dc59588beeffcd0232ef64aa73fd2325509fa7fc6" # ebaiStorePageCookieExdTOKEN = "PBE_2.0_5cd1c6141c127d41d12be02a04e58e0a2529c8ac5aad36be932f6e341f8be9a0e56b833c924cc95dd2ced76b31ea6fcbc7341cc9c03e3e2f470441192d51fc8bd81b6c5d24a867630a65400e688ff8f4453895ca9a18d7e91726941b28631cf2ab81797279967fcb03ae57e5bc33bf91e4495727569681c724597fb2c639a85c145723c12de262224e2536ad2c6f94bcae0c10c8f30728a6ea3ab6000940fffaa66271f17ecbae139f0b4fdfff791b7986a88b8f252827e799a2e1862ec522fd4c51c70ae9d17c69da93f1c12715bf9e0b35eccf39ae605d424c83319acaa7acbe191a8ee410afd1d02d1e02834ce6cbd2503b89f30efc1f7635a1e71e10e3370fc79b33e6352290e87f82b1cb8ac91195a09ff28e4418923e89993eb10d01e39fb621d517a14081611b25e83da9ec860fbacd2cb13562271585b53a0a7178e8f614bd62ffa442c78a10f008b3721675cad803024fad0c13aeecd64d1360bab4127883d2e7198201"
mtpsStoreToken = "M0p9VatZSeSHfrosD5IViAVl73IcA8mlcuHIV5sG6Zpv83a7JE0wY3t26aEhrrs_MR5gtLSFF1UIkt8HAjaXow" # mtpsStoreToken = "M0p9VatZSeSHfrosD5IViAVl73IcA8mlcuHIV5sG6Zpv83a7JE0wY3t26aEhrrs_MR5gtLSFF1UIkt8HAjaXow"
weimobAppID = "319F5E7FB6784DFCA3684C9333EB7744" weimobAppID = "319F5E7FB6784DFCA3684C9333EB7744"
weimobAppSecret = "7267AA7F58261F6965599218F5A1D592" weimobAppSecret = "7267AA7F58261F6965599218F5A1D592"
@@ -165,6 +170,10 @@ jd2Token = "29e0e567-c475-433a-aff0-37176ee8d8a7"
jd2AppKey = "7fb947624ff847ae94ff2f068cc99652" jd2AppKey = "7fb947624ff847ae94ff2f068cc99652"
jd2Secret = "1097abd7ef09427099b4922784af123a" jd2Secret = "1097abd7ef09427099b4922784af123a"
jdEclpAccessToken = "bcb6201b5b3c45a0976dcda5e2dea8aejiwm"
jdEclpAppKey = "0D397F05CF11C51BCDCC81744680EBC3"
jdEclpAppSecret = "f16a5e57ff4f4f428b702c40d2d4b933"
elmIsProd = true elmIsProd = true
elmToken = "" elmToken = ""
elmAppKey = "KLRDcOZGrk" elmAppKey = "KLRDcOZGrk"
@@ -187,6 +196,11 @@ weixinMiniSecret2 = "2a57228a716ce991a52739f0ff41111d"
wxpayNotifyURL = "http://callback.jxc4.com/wxpay/msg/" wxpayNotifyURL = "http://callback.jxc4.com/wxpay/msg/"
tonglianPayAppID = "00183083"
tonglianPayKey = "18048531223"
tonglianPayCusID = "56065105499TVAH"
tonglianPayNotifyURL = "http://callback.jxc4.com/tonglian/msg/"
dbConnectStr = "root:WebServer@1@tcp(db1.int.jxc4.com:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true" dbConnectStr = "root:WebServer@1@tcp(db1.int.jxc4.com:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true"
enableStoreWrite = true enableStoreWrite = true
@@ -204,6 +218,9 @@ dingdingSecret = "LWrZAFeqUfuVv7n_tc8vPpCAx6PT4CwManx2XCVhJOqGsx2L5XCDuX1sAN_Jtv
dingdingCallbackURL = "http://callback.jxc4.com/dingding/msg" dingdingCallbackURL = "http://callback.jxc4.com/dingding/msg"
yinbaoAppID = "18C0E0867E467DBC26EFF5E957B02EC4"
yinbaoAppKey = "682628966212343269"
[jxgy] [jxgy]
httpport = 8088 httpport = 8088
EnableDocs = false EnableDocs = false
@@ -244,8 +261,16 @@ weixinSecret = "6bbbed1443cc062c20a015a64c07a531"
weixinMiniAppID = "wx2d6949f724b2541d" weixinMiniAppID = "wx2d6949f724b2541d"
weixinMiniSecret = "11f3c380551c4683c149990b004d6df9" weixinMiniSecret = "11f3c380551c4683c149990b004d6df9"
weixinMiniAppID2 = "wx4b5930c13f8b1170"
weixinMiniSecret2 = "2a57228a716ce991a52739f0ff41111d"
wxpayNotifyURL = "http://callback-jxgy.jxc4.com/wxpay/msg/" wxpayNotifyURL = "http://callback-jxgy.jxc4.com/wxpay/msg/"
tonglianPayAppID = "00183083"
tonglianPayKey = "18048531223"
tonglianPayCusID = "56065105499TVAH"
tonglianPayNotifyURL = "http://callback-jxgy.jxc4.com/tonglian/msg/"
backstageHost = "http://www-jxgy.jxc4.com" backstageHost = "http://www-jxgy.jxc4.com"
wxBackstageHost = "http://wx-jxgy.jxc4.com" wxBackstageHost = "http://wx-jxgy.jxc4.com"
@@ -261,6 +286,13 @@ dingdingCallbackURL = "http://callback-jxgy.jxc4.com/dingding/msg"
getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken" getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken"
getYLYTokenURL = "http://www.jxc4.com/v2/sys/GetYLYToken" getYLYTokenURL = "http://www.jxc4.com/v2/sys/GetYLYToken"
jdEclpAccessToken = "bcb6201b5b3c45a0976dcda5e2dea8aejiwm"
jdEclpAppKey = "0D397F05CF11C51BCDCC81744680EBC3"
jdEclpAppSecret = "f16a5e57ff4f4f428b702c40d2d4b933"
yinbaoAppID = "18C0E0867E467DBC26EFF5E957B02EC4"
yinbaoAppKey = "682628966212343269"
storeName = "京西果园" storeName = "京西果园"
[test] [test]
@@ -316,6 +348,9 @@ dadaSourceID = "73753"
weixinAppID = "wx2bb99eb5d2c9b82c" weixinAppID = "wx2bb99eb5d2c9b82c"
weixinSecret = "6bbbed1443cc062c20a015a64c07a531" weixinSecret = "6bbbed1443cc062c20a015a64c07a531"
getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken" getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken"
getWeixin2TokenURL = "http://www.jxc4.com/v2/sys/GetWX2Token"
weixinMiniAppID2 = "wx4b5930c13f8b1170"
weixinMiniSecret2 = "2a57228a716ce991a52739f0ff41111d"
mtwmCallbackURL = "http://callback.alpha.jxc4.com" mtwmCallbackURL = "http://callback.alpha.jxc4.com"
@@ -345,6 +380,10 @@ jd2Token = "29e0e567-c475-433a-aff0-37176ee8d8a7"
jd2AppKey = "7fb947624ff847ae94ff2f068cc99652" jd2AppKey = "7fb947624ff847ae94ff2f068cc99652"
jd2Secret = "1097abd7ef09427099b4922784af123a" jd2Secret = "1097abd7ef09427099b4922784af123a"
jdEclpAccessToken = "bcb6201b5b3c45a0976dcda5e2dea8aejiwm"
jdEclpAppKey = "0D397F05CF11C51BCDCC81744680EBC3"
jdEclpAppSecret = "f16a5e57ff4f4f428b702c40d2d4b933"
elmIsProd = true elmIsProd = true
elmToken = "" elmToken = ""
elmAppKey = "KLRDcOZGrk" elmAppKey = "KLRDcOZGrk"
@@ -367,6 +406,10 @@ weixinMiniSecret2 = "2a57228a716ce991a52739f0ff41111d"
disableWeimob = false disableWeimob = false
getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken" getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken"
getWeixin2TokenURL = "http://www.jxc4.com/v2/sys/GetWX2Token"
getWeimobTokenURL = "http://www.jxc4.com/v2/sys/GetWeimobToken" getWeimobTokenURL = "http://www.jxc4.com/v2/sys/GetWeimobToken"
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true" dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true"
yinbaoAppID = "18C0E0867E467DBC26EFF5E957B02EC4"
yinbaoAppKey = "682628966212343269"

View File

@@ -647,3 +647,20 @@ func (c *StoreController) SyncJdStore() {
return retVal, "", err return retVal, "", err
}) })
} }
// @Title 清空打印机打印队列
// @Description 清空打印机打印队列
// @Param token header string true "认证token"
// @Param storeIDs formData string true "门店列表"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /DeletePrinterSeq [post]
func (c *StoreController) DeletePrinterSeq() {
var storeIDList []int
c.callDeletePrinterSeq(func(params *tStoreDeletePrinterSeqParams) (retVal interface{}, errCode string, err error) {
if jxutils.Strings2Objs(params.StoreIDs, &storeIDList); err == nil {
err = cms.DeletePrinterSeq(params.Ctx, storeIDList)
}
return retVal, "", err
})
}

View File

@@ -85,6 +85,7 @@ func (c *StoreSkuController) GetStoreSkus() {
// @Param ebaiSyncStatus query int false "饿百同步标识" // @Param ebaiSyncStatus query int false "饿百同步标识"
// @Param mtwmSyncStatus query int false "美团外卖同步标识" // @Param mtwmSyncStatus query int false "美团外卖同步标识"
// @Param lockTime query string false "价格锁定时间" // @Param lockTime query string false "价格锁定时间"
// @Param isHighPrice query bool false "是否查过高价格商品"
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult
// @router /GetStoresSkus [get,post] // @router /GetStoresSkus [get,post]
@@ -92,7 +93,7 @@ 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 { if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.SkuIDs, &skuIDs); err == nil {
retVal, err = cms.GetStoresSkus(params.Ctx, storeIDs, skuIDs, params.IsFocus, params.Keyword, params.IsBySku, params.IsAct, params.MapData, params.Offset, params.PageSize) retVal, err = cms.GetStoresSkus(params.Ctx, storeIDs, skuIDs, params.IsFocus, params.IsHighPrice, params.Keyword, params.IsBySku, params.IsAct, params.MapData, params.Offset, params.PageSize)
} }
return retVal, "", err return retVal, "", err
}) })
@@ -674,6 +675,7 @@ func (c *StoreSkuController) SendSeckillSkusCountMsg() {
// @Param token header string true "认证token" // @Param token header string true "认证token"
// @Param payload formData string true "json数据JdStoreSkus对象" // @Param payload formData string true "json数据JdStoreSkus对象"
// @Param vendorID formData int true "厂商ID" // @Param vendorID formData int true "厂商ID"
// @Param ignoreLow formData bool true "是否忽略低价商品"
// @Param isAsync formData bool true "是否异步,缺省是同步" // @Param isAsync formData bool true "是否异步,缺省是同步"
// @Param isContinueWhenError formData bool true "单个同步失败是否继续缺省false" // @Param isContinueWhenError formData bool true "单个同步失败是否继续缺省false"
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult
@@ -685,7 +687,76 @@ func (c *StoreSkuController) RefreshJxPriceByVendor() {
if err = jxutils.Strings2Objs(params.Payload, &skuBindInfos); err != nil { if err = jxutils.Strings2Objs(params.Payload, &skuBindInfos); err != nil {
return retVal, "", err return retVal, "", err
} }
retVal, err = cms.RefreshJxPriceByVendor(params.Ctx, skuBindInfos, params.VendorID, params.IsAsync, params.IsContinueWhenError) retVal, err = cms.RefreshJxPriceByVendor(params.Ctx, skuBindInfos, params.VendorID, params.IgnoreLow, params.IsAsync, params.IsContinueWhenError)
return retVal, "", err
})
}
// @Title 根据平台价反算京西价2
// @Description 根据平台价反算京西价2
// @Param token header string true "认证token"
// @Param storeIDs formData string true "门店列表"
// @Param vendorID formData int true "厂商ID"
// @Param isAsync formData bool false "是否异步,缺省是同步"
// @Param isContinueWhenError formData bool false "单个同步失败是否继续缺省false"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /RefreshJxPriceByVendor2 [put]
func (c *StoreSkuController) RefreshJxPriceByVendor2() {
var storeIDs []int
c.callRefreshJxPriceByVendor2(func(params *tStoreSkuRefreshJxPriceByVendor2Params) (retVal interface{}, errCode string, err error) {
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs); err != nil {
return retVal, "", err
}
retVal, err = cms.RefreshJxPriceByVendor2(params.Ctx, storeIDs, params.VendorID, params.IsAsync, params.IsContinueWhenError)
return retVal, "", err
})
}
// @Title 生成门店商品备份表
// @Description 生成门店商品备份表
// @Param token header string true "认证token"
// @Param isAsync formData bool false "是否异步,缺省是同步"
// @Param isContinueWhenError formData bool false "单个同步失败是否继续缺省false"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /BackUpStoreSkuBind [post]
func (c *StoreSkuController) BackUpStoreSkuBind() {
c.callBackUpStoreSkuBind(func(params *tStoreSkuBackUpStoreSkuBindParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.BackUpStoreSkuBind(params.Ctx, params.IsAsync, params.IsContinueWhenError)
return retVal, "", err
})
}
// @Title 恢复门店商品表
// @Description 恢复门店商品表
// @Param token header string true "认证token"
// @Param snapshotAt formData string true "日期格式2020-03-06 00:00:00"
// @Param storeIDs formData string true "门店列表"
// @Param skuIDs formData string false "商品列表"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /ReturnStoreSkuBind [post]
func (c *StoreSkuController) ReturnStoreSkuBind() {
c.callReturnStoreSkuBind(func(params *tStoreSkuReturnStoreSkuBindParams) (retVal interface{}, errCode string, err error) {
var storeIDs, skuIDs []int
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.SkuIDs, &skuIDs); err != nil {
return retVal, "", err
}
err = cms.ReturnStoreSkuBind(params.Ctx, params.SnapshotAt, storeIDs, skuIDs)
return retVal, "", err
})
}
// @Title 物料库存刷新(物料店商品上下架)
// @Description 物料库存刷新(物料店商品上下架)
// @Param token header string false "认证token"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /RefreshMatterStock [post]
func (c *StoreSkuController) RefreshMatterStock() {
c.callRefreshMatterStock(func(params *tStoreSkuRefreshMatterStockParams) (retVal interface{}, errCode string, err error) {
err = cms.RefreshMatterStock(params.Ctx, 0)
return retVal, "", err return retVal, "", err
}) })
} }

View File

@@ -485,3 +485,17 @@ func (c *User2Controller) DeleteUserInfo() {
return retVal, "", err return retVal, "", err
}) })
} }
// @Title 得到用户自己的门店列表(商城用)
// @Description 得到用户自己的门店列表(商城用)
// @Param token header string false "认证token"
// @Param mobile query string true "电话"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetMyJxStoreList [get]
func (c *User2Controller) GetMyJxStoreList() {
c.callGetMyJxStoreList(func(params *tUser2GetMyJxStoreListParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.GetMyJxStoreList(params.Ctx, params.Mobile)
return retVal, "", err
})
}

View File

@@ -0,0 +1,22 @@
package controllers
import (
"fmt"
"net/http"
"github.com/astaxie/beego"
)
type EclpController struct {
beego.Controller
}
func (c *EclpController) Msg() {
if c.Ctx.Input.Method() == http.MethodPost {
fmt.Println("testElcp", c.Ctx.Request.Body)
c.Data["json"] = c.Ctx.Request.Body
c.ServeJSON()
} else {
c.Abort("404")
}
}

View File

@@ -1,8 +1,13 @@
package controllers package controllers
import ( import (
"time"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxstore/event" "git.rosy.net.cn/jx-callback/business/jxstore/event"
"git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/globals/api"
"github.com/astaxie/beego" "github.com/astaxie/beego"
) )
@@ -55,3 +60,25 @@ func (c *EventController) GetCheckVendorCookie() {
return retVal, "", err return retVal, "", err
}) })
} }
// @Title 得到微信小程序码
// @Description 得到微信小程序码
// @Param token header string true "认证token"
// @Param scene formData string true "最大32个可见字符只支持数字大小写英文以及部分特殊字符!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)"
// @Param page formData string false "必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index, 根路径前不要填加 /,不能携带参数参数请放在scene字段里如果不填写这个字段默认跳主页面"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetWeixinUnlimited [post]
func (c *EventController) GetWeixinUnlimited() {
c.callGetWeixinUnlimited(func(params *tEventGetWeixinUnlimitedParams) (retVal interface{}, errCode string, err error) {
// api.WeixinMiniAPI2.CBRetrieveToken()
result, err := api.WeixinMiniAPI2.GetUnlimited(params.Scene, params.Page)
if err != nil || result == nil {
return retVal, "", err
}
fileName := "wxcode" + utils.Int64ToStr(time.Now().Unix()) + ".jpg"
retVal, err = jxutils.UploadExportContent([]byte(result["fakeData"].(string)), fileName)
// tasks.RefreshWeixinToken()
return retVal, "", err
})
}

View File

@@ -1002,3 +1002,17 @@ func (c *OrderController) GetOrdersAccept() {
return retVal, "", err return retVal, "", err
}) })
} }
// @Title 获取某个门店上次申请物料到现在的销量
// @Description 获取某个门店上次申请物料到现在的销量
// @Param token header string false "认证token"
// @Param storeID query int true "门店ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetMatterStoreOrderCount [get]
func (c *OrderController) GetMatterStoreOrderCount() {
c.callGetMatterStoreOrderCount(func(params *tOrderGetMatterStoreOrderCountParams) (retVal interface{}, errCode string, err error) {
retVal, err = orderman.GetMatterStoreOrderCount(params.Ctx, params.StoreID)
return retVal, "", err
})
}

View File

@@ -16,6 +16,7 @@ type JxOrderController struct {
// @Param token header string true "认证token" // @Param token header string true "认证token"
// @Param jxOrder formData string true "订单信息" // @Param jxOrder formData string true "订单信息"
// @Param addressID formData int64 true "配送地址ID" // @Param addressID formData int64 true "配送地址ID"
// @Param fromStoreID formData int fasle "物料配送门店"
// @Param createType formData int false "创建类型, 0:预创建, 1:创建" // @Param createType formData int false "创建类型, 0:预创建, 1:创建"
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult
@@ -24,7 +25,7 @@ func (c *JxOrderController) CreateOrder() {
c.callCreateOrder(func(params *tJxorderCreateOrderParams) (retVal interface{}, errCode string, err error) { c.callCreateOrder(func(params *tJxorderCreateOrderParams) (retVal interface{}, errCode string, err error) {
var jxOrder *localjx.JxOrderInfo var jxOrder *localjx.JxOrderInfo
if err = utils.UnmarshalUseNumber([]byte(params.JxOrder), &jxOrder); err == nil { if err = utils.UnmarshalUseNumber([]byte(params.JxOrder), &jxOrder); err == nil {
retVal, err = localjx.CreateOrder(params.Ctx, jxOrder, int64(params.AddressID), params.CreateType) retVal, err = localjx.CreateOrder(params.Ctx, jxOrder, int64(params.AddressID), params.CreateType, params.FromStoreID)
} }
return retVal, "", err return retVal, "", err
}) })
@@ -61,8 +62,8 @@ func (c *JxOrderController) BuyerCancelOrder() {
}) })
} }
// @Title 查询网络打印机状态 // @Title 得到门店营业时间配送列表
// @Description 查询网络打印机状态 // @Description 得到门店营业时间配送列表
// @Param token header string true "认证token" // @Param token header string true "认证token"
// @Param storeID query int true "门店ID" // @Param storeID query int true "门店ID"
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult
@@ -159,3 +160,44 @@ func (c *JxOrderController) PayForPopluarMan() {
return retVal, "", err return retVal, "", err
}) })
} }
// @Title 查询物料订单状态
// @Description 查询物料订单状态
// @Param token header string true "认证token"
// @Param vendorOrderID query string true "订单ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetMatterOrderStatus [get]
func (c *JxOrderController) GetMatterOrderStatus() {
c.callGetMatterOrderStatus(func(params *tJxorderGetMatterOrderStatusParams) (retVal interface{}, errCode string, err error) {
retVal, err = localjx.GetMatterOrderStatus(params.Ctx, params.VendorOrderID)
return retVal, "", err
})
}
// @Title 刷新所有物料订单状态
// @Description 刷新所有物料订单状态
// @Param token header string true "认证token"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /RefreshAllMatterOrderStatus [put]
func (c *JxOrderController) RefreshAllMatterOrderStatus() {
c.callRefreshAllMatterOrderStatus(func(params *tJxorderRefreshAllMatterOrderStatusParams) (retVal interface{}, errCode string, err error) {
err = localjx.RefreshAllMatterOrderStatus(params.Ctx)
return retVal, "", err
})
}
// @Title 重发物料订单
// @Description 重发物料订单
// @Param token header string true "认证token"
// @Param vendorOrderID formData string true "订单ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /SendFailedMatterOrder [post]
func (c *JxOrderController) SendFailedMatterOrder() {
c.callSendFailedMatterOrder(func(params *tJxorderSendFailedMatterOrderParams) (retVal interface{}, errCode string, err error) {
err = localjx.SendFailedMatterOrder(params.Ctx, params.VendorOrderID)
return retVal, "", err
})
}

View File

@@ -37,6 +37,23 @@ func (c *SysController) GetWXToken() {
}) })
} }
// @Title 得到微信小程序2token
// @Description 得到微信小程序2token
// @Param accessKey query string true "假token"
// @Param oldToken query string false "之前的token"
// @Param waitSecond query int false "等待秒数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetWX2Token [get]
func (c *SysController) GetWX2Token() {
c.callGetWX2Token(func(params *tSysGetWX2TokenParams) (retVal interface{}, errCode string, err error) {
if params.AccessKey == globals.GetWeixinTokenKey {
retVal = syseventhub.SysEventHub.GetWX2Token(params.OldToken, time.Duration(params.WaitSecond)*time.Second)
}
return retVal, "", err
})
}
// @Title 得到易联云token // @Title 得到易联云token
// @Description 得到易联云token // @Description 得到易联云token
// @Param accessKey query string true "假token" // @Param accessKey query string true "假token"

View File

@@ -0,0 +1,39 @@
package controllers
import (
"bytes"
"io/ioutil"
"net/http"
"git.rosy.net.cn/jx-callback/globals/api"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/partner/purchase/jx/localjx"
"git.rosy.net.cn/jx-callback/globals"
"github.com/astaxie/beego"
"github.com/astaxie/beego/context"
)
type TongLianController struct {
beego.Controller
}
func (c *TongLianController) Msg() {
if c.Ctx.Input.Method() == http.MethodPost {
call, err := api.TLpayAPI.GetCallbackMsg(getUsefulRequest2(c.Ctx))
globals.SugarLogger.Debugf("tonglianapi callback callbackResponse:%s", utils.Format4Output(call, true))
if err == nil {
err = localjx.OnTLPayCallback(call)
}
c.Data["json"] = call
c.ServeJSON()
} else {
c.Abort("404")
}
}
func getUsefulRequest2(ctx *context.Context) *http.Request {
ctx.Request.Body = ioutil.NopCloser(bytes.NewReader(ctx.Input.RequestBody))
return ctx.Request
}

View File

@@ -3,6 +3,11 @@ package api
import ( import (
"time" "time"
"git.rosy.net.cn/baseapi/platformapi/jdeclpapi"
"git.rosy.net.cn/baseapi/platformapi/yinbaoapi"
"git.rosy.net.cn/baseapi/platformapi/tonglianpayapi"
aliyunsmsclient "github.com/KenmyZhang/aliyun-communicate" aliyunsmsclient "github.com/KenmyZhang/aliyun-communicate"
"git.rosy.net.cn/baseapi/platformapi" "git.rosy.net.cn/baseapi/platformapi"
@@ -38,6 +43,7 @@ var (
Jd2API *jdapi.API Jd2API *jdapi.API
FakeJdAPI *jdapi.API FakeJdAPI *jdapi.API
JdEclpAPI *jdeclpapi.API
ElmAPI *elmapi.API ElmAPI *elmapi.API
EbaiAPI *ebaiapi.API EbaiAPI *ebaiapi.API
@@ -50,7 +56,10 @@ var (
WeixinMiniAPI *weixinapi.API // 小程序 WeixinMiniAPI *weixinapi.API // 小程序
WeixinMiniAPI2 *weixinapi.API // 小程序2 WeixinMiniAPI2 *weixinapi.API // 小程序2
WeixinMiniAppID2 string WeixinMiniAppID2 string
WxpayAPI *wxpayapi.API // 微信支付API WxpayAPI *wxpayapi.API // 微信支付API
TLpayAPI *tonglianpayapi.API //通联收银宝api
YinBaoAPI *yinbaoapi.API //银豹平台api
WeixinPageAPI *weixinapi.API // 用户微信扫码登录 WeixinPageAPI *weixinapi.API // 用户微信扫码登录
@@ -82,16 +91,16 @@ func init() {
func Init() { func Init() {
if !beego.AppConfig.DefaultBool("disableJd", false) { if !beego.AppConfig.DefaultBool("disableJd", false) {
JdAPI = jdapi.New(beego.AppConfig.String("jdToken"), beego.AppConfig.String("jdAppKey"), beego.AppConfig.String("jdSecret")) JdAPI = jdapi.New(beego.AppConfig.String("jdToken"), beego.AppConfig.String("jdAppKey"), beego.AppConfig.String("jdSecret"))
cookieValue := beego.AppConfig.DefaultString("jdStorePageCookie", "") // cookieValue := beego.AppConfig.DefaultString("jdStorePageCookie", "")
JdAPI.SetJdCookie(cookieValue) // JdAPI.SetJdCookie(cookieValue)
conf := platformapi.NewDefAPIConfig() conf := platformapi.NewDefAPIConfig()
conf.MaxSleepSecondWhenExceedLimit = 60 * 30 // 最大重试间隙30分钟 conf.MaxSleepSecondWhenExceedLimit = 60 * 30 // 最大重试间隙30分钟
JdPageAPI = jdapi.NewPageOnly(cookieValue, conf) JdPageAPI = jdapi.NewPageOnly("", conf)
if globals.Jd2OrgCode != "" { if globals.Jd2OrgCode != "" {
Jd2API = jdapi.New(beego.AppConfig.String("jd2Token"), beego.AppConfig.String("jd2AppKey"), beego.AppConfig.String("jd2Secret")) Jd2API = jdapi.New(beego.AppConfig.String("jd2Token"), beego.AppConfig.String("jd2AppKey"), beego.AppConfig.String("jd2Secret"))
Jd2API.SetJdCookie(beego.AppConfig.DefaultString("jd2StorePageCookie", "")) // Jd2API.SetJdCookie(beego.AppConfig.DefaultString("jd2StorePageCookie", ""))
} }
fakeJdToken := beego.AppConfig.DefaultString("fakeJdToken", "") fakeJdToken := beego.AppConfig.DefaultString("fakeJdToken", "")
@@ -101,6 +110,11 @@ func Init() {
} else { } else {
JdAPI = nil JdAPI = nil
} }
if !beego.AppConfig.DefaultBool("disableJdEclp", false) {
JdEclpAPI = jdeclpapi.New(beego.AppConfig.String("jdEclpAccessToken"), beego.AppConfig.String("jdEclpAppKey"), beego.AppConfig.String("jdEclpAppSecret"))
} else {
JdEclpAPI = nil
}
if !beego.AppConfig.DefaultBool("disableElm", false) { if !beego.AppConfig.DefaultBool("disableElm", false) {
ElmAPI = elmapi.New(beego.AppConfig.DefaultString("elmToken", ""), beego.AppConfig.String("elmAppKey"), beego.AppConfig.String("elmSecret"), beego.AppConfig.DefaultBool("elmIsProd", false)) ElmAPI = elmapi.New(beego.AppConfig.DefaultString("elmToken", ""), beego.AppConfig.String("elmAppKey"), beego.AppConfig.String("elmSecret"), beego.AppConfig.DefaultBool("elmIsProd", false))
} else { } else {
@@ -108,9 +122,9 @@ func Init() {
} }
if !beego.AppConfig.DefaultBool("disableMtwm", false) { if !beego.AppConfig.DefaultBool("disableMtwm", false) {
MtwmAPI = mtwmapi.New(beego.AppConfig.String("mtwmAppID"), beego.AppConfig.String("mtwmSecret"), beego.AppConfig.String("mtwmCallbackURL")) MtwmAPI = mtwmapi.New(beego.AppConfig.String("mtwmAppID"), beego.AppConfig.String("mtwmSecret"), beego.AppConfig.String("mtwmCallbackURL"))
if mtwmCookieStr := beego.AppConfig.DefaultString("mtwmCookieStr", ""); mtwmCookieStr != "" { // if mtwmCookieStr := beego.AppConfig.DefaultString("mtwmCookieStr", ""); mtwmCookieStr != "" {
MtwmAPI.SetCookieWithStr(mtwmCookieStr) // MtwmAPI.SetCookieWithStr(mtwmCookieStr)
} // }
} else { } else {
MtwmAPI = nil MtwmAPI = nil
} }
@@ -124,32 +138,38 @@ func Init() {
} }
if !beego.AppConfig.DefaultBool("disableEbai", false) { if !beego.AppConfig.DefaultBool("disableEbai", false) {
EbaiAPI = ebaiapi.New(beego.AppConfig.String("ebaiSource"), beego.AppConfig.String("ebaiSecret")) EbaiAPI = ebaiapi.New(beego.AppConfig.String("ebaiSource"), beego.AppConfig.String("ebaiSecret"))
ebaiStorePageCookieWMUSS := beego.AppConfig.DefaultString("ebaiStorePageCookieWMUSS", "") // ebaiStorePageCookieWMUSS := beego.AppConfig.DefaultString("ebaiStorePageCookieWMUSS", "")
ebaiStorePageCookieWMSTOKEN := beego.AppConfig.DefaultString("ebaiStorePageCookieWMSTOKEN", "") // ebaiStorePageCookieWMSTOKEN := beego.AppConfig.DefaultString("ebaiStorePageCookieWMSTOKEN", "")
ebaiStorePageCookieExdTOKEN := beego.AppConfig.DefaultString("ebaiStorePageCookieExdTOKEN", "") // ebaiStorePageCookieExdTOKEN := beego.AppConfig.DefaultString("ebaiStorePageCookieExdTOKEN", "")
if ebaiStorePageCookieWMUSS != "" && ebaiStorePageCookieWMSTOKEN != "" && ebaiStorePageCookieExdTOKEN != "" { // if ebaiStorePageCookieWMUSS != "" && ebaiStorePageCookieWMSTOKEN != "" && ebaiStorePageCookieExdTOKEN != "" {
EbaiAPI.SetCookie("WMUSS", ebaiStorePageCookieWMUSS) // EbaiAPI.SetCookie("WMUSS", ebaiStorePageCookieWMUSS)
EbaiAPI.SetCookie("WMSTOKEN", ebaiStorePageCookieWMSTOKEN) // EbaiAPI.SetCookie("WMSTOKEN", ebaiStorePageCookieWMSTOKEN)
EbaiAPI.SetCookie("PASSPORT_DELIMONT_TOKEN", ebaiStorePageCookieExdTOKEN) // EbaiAPI.SetCookie("PASSPORT_DELIMONT_TOKEN", ebaiStorePageCookieExdTOKEN)
} // }
Ebai2API = ebaiapi.New(beego.AppConfig.String("ebaiSource"), beego.AppConfig.String("ebaiSecret")) Ebai2API = ebaiapi.New(beego.AppConfig.String("ebaiSource"), beego.AppConfig.String("ebaiSecret"))
ebaiStorePageCookieWMUSS2 := beego.AppConfig.DefaultString("ebaiStorePageCookieWMUSS2", "") // ebaiStorePageCookieWMUSS2 := beego.AppConfig.DefaultString("ebaiStorePageCookieWMUSS2", "")
ebaiStorePageCookieWMSTOKEN2 := beego.AppConfig.DefaultString("ebaiStorePageCookieWMSTOKEN2", "") // ebaiStorePageCookieWMSTOKEN2 := beego.AppConfig.DefaultString("ebaiStorePageCookieWMSTOKEN2", "")
if ebaiStorePageCookieWMUSS2 != "" && ebaiStorePageCookieWMSTOKEN2 != "" && ebaiStorePageCookieExdTOKEN != "" { // if ebaiStorePageCookieWMUSS2 != "" && ebaiStorePageCookieWMSTOKEN2 != "" && ebaiStorePageCookieExdTOKEN != "" {
Ebai2API.SetCookie("WMUSS", ebaiStorePageCookieWMUSS2) // Ebai2API.SetCookie("WMUSS", ebaiStorePageCookieWMUSS2)
Ebai2API.SetCookie("WMSTOKEN", ebaiStorePageCookieWMSTOKEN2) // Ebai2API.SetCookie("WMSTOKEN", ebaiStorePageCookieWMSTOKEN2)
Ebai2API.SetCookie("PASSPORT_DELIMONT_TOKEN", ebaiStorePageCookieExdTOKEN) // Ebai2API.SetCookie("PASSPORT_DELIMONT_TOKEN", ebaiStorePageCookieExdTOKEN)
} // }
} else { } else {
EbaiAPI = nil EbaiAPI = nil
Ebai2API = nil Ebai2API = nil
} }
// if !beego.AppConfig.DefaultBool("disableYb", false) {
// YinBaoAPI = yinbaoapi.New(beego.AppConfig.String("yinbaoAppKey"), beego.AppConfig.String("yinbaoAppID"))
// } else {
// YinBaoAPI = nil
// }
if !beego.AppConfig.DefaultBool("disableMtps", false) { if !beego.AppConfig.DefaultBool("disableMtps", false) {
MtpsAPI = mtpsapi.New(beego.AppConfig.String("mtpsAppKey"), beego.AppConfig.String("mtpsSecret")) MtpsAPI = mtpsapi.New(beego.AppConfig.String("mtpsAppKey"), beego.AppConfig.String("mtpsSecret"))
if mtpsStoreToken := beego.AppConfig.DefaultString("mtpsStoreToken", ""); mtpsStoreToken != "" { // if mtpsStoreToken := beego.AppConfig.DefaultString("mtpsStoreToken", ""); mtpsStoreToken != "" {
MtpsAPI.SetCookie("token", mtpsStoreToken) // MtpsAPI.SetCookie("token", mtpsStoreToken)
} // }
} else { } else {
MtpsAPI = nil MtpsAPI = nil
} }
@@ -181,6 +201,10 @@ func Init() {
WxpayAPI = wxpayapi.NewWithCertificate(beego.AppConfig.String("wxpayAppID"), beego.AppConfig.String("wxpayAppKey"), beego.AppConfig.String("wxpayAppMchID"), WxpayAPI = wxpayapi.NewWithCertificate(beego.AppConfig.String("wxpayAppID"), beego.AppConfig.String("wxpayAppKey"), beego.AppConfig.String("wxpayAppMchID"),
"conf/apiclient_cert.pem", "conf/apiclient_key.pem") "conf/apiclient_cert.pem", "conf/apiclient_key.pem")
} }
if globals.TLPayNotifyURL != "" {
TLpayAPI = tonglianpayapi.New(beego.AppConfig.String("tonglianPayAppID"), beego.AppConfig.String("tonglianPayKey"), beego.AppConfig.String("tonglianPayCusID"), beego.AppConfig.String("wxpayAppID"))
}
AutonaviAPI = autonavi.New(beego.AppConfig.String("autonaviKey")) AutonaviAPI = autonavi.New(beego.AppConfig.String("autonaviKey"))
BaiDuNaviAPI = baidunavi.New(beego.AppConfig.String("baidunaviAK"), beego.AppConfig.String("baidunaviSK")) BaiDuNaviAPI = baidunavi.New(beego.AppConfig.String("baidunaviAK"), beego.AppConfig.String("baidunaviSK"))
QiniuAPI = qbox.NewMac(beego.AppConfig.String("qiniuAK"), beego.AppConfig.String("qiniuSK")) QiniuAPI = qbox.NewMac(beego.AppConfig.String("qiniuAK"), beego.AppConfig.String("qiniuSK"))

View File

@@ -31,6 +31,7 @@ func Init() {
orm.RegisterModel(&model.Place{}) orm.RegisterModel(&model.Place{})
orm.RegisterModel(&model.Store{}, &model.StoreSub{}, &model.StoreMap{}, &model.StoreCourierMap{}) orm.RegisterModel(&model.Store{}, &model.StoreSub{}, &model.StoreMap{}, &model.StoreCourierMap{})
orm.RegisterModel(&model.SkuVendorCategory{}, &model.StoreSkuCategoryMap{}, &model.SkuName{}, &model.Sku{}, &model.SkuNamePlaceBind{}, &model.StoreSkuBind{}) orm.RegisterModel(&model.SkuVendorCategory{}, &model.StoreSkuCategoryMap{}, &model.SkuName{}, &model.Sku{}, &model.SkuNamePlaceBind{}, &model.StoreSkuBind{})
orm.RegisterModel(&model.StoreSkuBindHistory{})
orm.RegisterModel(&model.SkuCategory{}) orm.RegisterModel(&model.SkuCategory{})
orm.RegisterModel(&model.ThingMap{}) orm.RegisterModel(&model.ThingMap{})

View File

@@ -32,10 +32,11 @@ var (
BackstageHost string BackstageHost string
WxBackstageHost string WxBackstageHost string
GetWeixinTokenURL string GetWeixinTokenURL string
GetWeixinTokenKey string GetWeixin2TokenURL string
GetYLYTokenURL string GetWeixinTokenKey string
GetWeimobTokenURL string GetYLYTokenURL string
GetWeimobTokenURL string
StoreName string StoreName string
StoreNameMtwm string StoreNameMtwm string
@@ -50,6 +51,7 @@ var (
DisableWXAuth1 bool DisableWXAuth1 bool
WxpayNotifyURL string WxpayNotifyURL string
TLPayNotifyURL string
JdOrgCode string JdOrgCode string
Jd2OrgCode string Jd2OrgCode string
@@ -99,6 +101,7 @@ func Init() {
WxBackstageHost = beego.AppConfig.DefaultString("wxBackstageHost", "") WxBackstageHost = beego.AppConfig.DefaultString("wxBackstageHost", "")
GetWeixinTokenURL = beego.AppConfig.DefaultString("getWeixinTokenURL", "") GetWeixinTokenURL = beego.AppConfig.DefaultString("getWeixinTokenURL", "")
GetWeixin2TokenURL = beego.AppConfig.DefaultString("getWeixin2TokenURL", "")
GetYLYTokenURL = beego.AppConfig.DefaultString("getYLYTokenURL", "") GetYLYTokenURL = beego.AppConfig.DefaultString("getYLYTokenURL", "")
GetWeimobTokenURL = beego.AppConfig.DefaultString("getWeimobTokenURL", "") GetWeimobTokenURL = beego.AppConfig.DefaultString("getWeimobTokenURL", "")
GetWeixinTokenKey = beego.AppConfig.DefaultString("getWeixinTokenKey", "") GetWeixinTokenKey = beego.AppConfig.DefaultString("getWeixinTokenKey", "")
@@ -116,6 +119,7 @@ func Init() {
DisableWXAuth1 = true DisableWXAuth1 = true
WxpayNotifyURL = beego.AppConfig.DefaultString("wxpayNotifyURL", "") WxpayNotifyURL = beego.AppConfig.DefaultString("wxpayNotifyURL", "")
TLPayNotifyURL = beego.AppConfig.DefaultString("tonglianPayNotifyURL", "")
JdOrgCode = beego.AppConfig.DefaultString("jdOrgCode", "") JdOrgCode = beego.AppConfig.DefaultString("jdOrgCode", "")
Jd2OrgCode = beego.AppConfig.DefaultString("jd2OrgCode", "") Jd2OrgCode = beego.AppConfig.DefaultString("jd2OrgCode", "")

View File

@@ -126,10 +126,14 @@ func main() {
globals.SugarLogger.Errorf("RefreshWeixinToken failed with error:%s", err) globals.SugarLogger.Errorf("RefreshWeixinToken failed with error:%s", err)
return return
} }
if err := tasks.RefreshWeimobToken(); err != nil { if err := tasks.RefreshWeixin2Token(); err != nil {
globals.SugarLogger.Errorf("RefreshWeimobToken failed with error:%s", err) globals.SugarLogger.Errorf("RefreshWeixin2Token failed with error:%s", err)
return return
} }
// if err := tasks.RefreshWeimobToken(); err != nil {
// globals.SugarLogger.Errorf("RefreshWeimobToken failed with error:%s", err)
// return
// }
if err := tasks.RefreshYilianyunToken(); err != nil { if err := tasks.RefreshYilianyunToken(); err != nil {
globals.SugarLogger.Errorf("RefreshYilianyunToken failed with error:%s", err) globals.SugarLogger.Errorf("RefreshYilianyunToken failed with error:%s", err)
return return

View File

@@ -421,6 +421,15 @@ func init() {
Filters: nil, Filters: nil,
Params: nil}) Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:EventController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:EventController"],
beego.ControllerComments{
Method: "GetWeixinUnlimited",
Router: `/GetWeixinUnlimited`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:FinancialController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:FinancialController"], beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:FinancialController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:FinancialController"],
beego.ControllerComments{ beego.ControllerComments{
Method: "GetOrdersFinancial", Method: "GetOrdersFinancial",
@@ -646,6 +655,15 @@ func init() {
Filters: nil, Filters: nil,
Params: nil}) Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"],
beego.ControllerComments{
Method: "GetMatterOrderStatus",
Router: `/GetMatterOrderStatus`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"], beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"],
beego.ControllerComments{ beego.ControllerComments{
Method: "GetMyOrderCountInfo", Method: "GetMyOrderCountInfo",
@@ -691,6 +709,24 @@ func init() {
Filters: nil, Filters: nil,
Params: nil}) Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"],
beego.ControllerComments{
Method: "RefreshAllMatterOrderStatus",
Router: `/RefreshAllMatterOrderStatus`,
AllowHTTPMethods: []string{"put"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"],
beego.ControllerComments{
Method: "SendFailedMatterOrder",
Router: `/SendFailedMatterOrder`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxShopController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxShopController"], beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxShopController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxShopController"],
beego.ControllerComments{ beego.ControllerComments{
Method: "JxMsg", Method: "JxMsg",
@@ -954,6 +990,15 @@ func init() {
Filters: nil, Filters: nil,
Params: nil}) Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
beego.ControllerComments{
Method: "GetMatterStoreOrderCount",
Router: `/GetMatterStoreOrderCount`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"], beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
beego.ControllerComments{ beego.ControllerComments{
Method: "GetOrderInfo", Method: "GetOrderInfo",
@@ -1485,6 +1530,15 @@ func init() {
Filters: nil, Filters: nil,
Params: nil}) Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
beego.ControllerComments{
Method: "DeletePrinterSeq",
Router: `/DeletePrinterSeq`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"], beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
beego.ControllerComments{ beego.ControllerComments{
Method: "DeleteStore", Method: "DeleteStore",
@@ -1755,6 +1809,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: "BackUpStoreSkuBind",
Router: `/BackUpStoreSkuBind`,
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: "CopyStoreSkus", Method: "CopyStoreSkus",
@@ -1908,6 +1971,24 @@ 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: "RefreshJxPriceByVendor2",
Router: `/RefreshJxPriceByVendor2`,
AllowHTTPMethods: []string{"put"},
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.ControllerComments{
Method: "RefreshMatterStock",
Router: `/RefreshMatterStock`,
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: "RefreshStoresSkuByVendor", Method: "RefreshStoresSkuByVendor",
@@ -1917,6 +1998,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: "ReturnStoreSkuBind",
Router: `/ReturnStoreSkuBind`,
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: "SendSeckillSkusCountMsg", Method: "SendSeckillSkusCountMsg",
@@ -2124,6 +2214,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: "GetWX2Token",
Router: `/GetWX2Token`,
AllowHTTPMethods: []string{"get"},
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: "GetWXToken", Method: "GetWXToken",
@@ -2358,6 +2457,15 @@ func init() {
Filters: nil, Filters: nil,
Params: nil}) Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"],
beego.ControllerComments{
Method: "GetMyJxStoreList",
Router: `/GetMyJxStoreList`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"], beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"],
beego.ControllerComments{ beego.ControllerComments{
Method: "GetMyStoreList", Method: "GetMyStoreList",

View File

@@ -155,6 +155,8 @@ func init() {
beego.AutoRouter(&controllers.DingDingController{}) beego.AutoRouter(&controllers.DingDingController{})
beego.AutoRouter(&controllers.WXPayController{}) beego.AutoRouter(&controllers.WXPayController{})
beego.AutoRouter(&controllers.Djsw2Controller{}) beego.AutoRouter(&controllers.Djsw2Controller{})
beego.AutoRouter(&controllers.TongLianController{})
beego.AutoRouter(&controllers.EclpController{})
// 如下都是用于检测存活的空接口 // 如下都是用于检测存活的空接口
beego.Any("/", func(ctx *beecontext.Context) { beego.Any("/", func(ctx *beecontext.Context) {