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:
@@ -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")
|
||||
if err = err2; err == nil {
|
||||
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 {
|
||||
jxutils.RefreshOrderSkuRelated(order)
|
||||
jxutils.RefreshOrderEarningPrice2(order, payPercentage)
|
||||
// caculateOrderEarningPrice(order, payPercentage)
|
||||
}
|
||||
return err
|
||||
@@ -872,5 +874,3 @@ func RefreshOrdersPriceInfo(ctx *jxcontext.Context, fromTime, toTime time.Time,
|
||||
}
|
||||
return hint, err
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -49,8 +49,14 @@ type StoresOrderSaleInfo struct {
|
||||
|
||||
type OrderSkusAccept struct {
|
||||
model.SkuAndName
|
||||
SumWeight int `json:"sumWeight"`
|
||||
SumCount int `json:"sumCount"`
|
||||
SumWeight int `json:"sumWeight"`
|
||||
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) {
|
||||
@@ -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) {
|
||||
db := dao.GetDB()
|
||||
var isFinish = true
|
||||
if toTime.Sub(fromTime).Hours() > 24 {
|
||||
isFinish = false
|
||||
}
|
||||
orderSkuList, err := dao.GetStoreOrderSkuList(db, storeIDList, fromTime, toTime, statusList, isFinish)
|
||||
// var isFinish = true
|
||||
// if toTime.Sub(fromTime).Hours() > 24 {
|
||||
// isFinish = false
|
||||
// }
|
||||
orderSkuList, err := dao.GetStoreOrderSkuList(db, storeIDList, fromTime, toTime, statusList, true)
|
||||
if err != nil {
|
||||
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 {
|
||||
return nil, err
|
||||
}
|
||||
orderSkuList4Afs, err := dao.GetStoreOrderSkuList4Afs(db, storeIDList, fromTime, toTime, isFinish)
|
||||
orderSkuList4Afs, err := dao.GetStoreOrderSkuList4Afs(db, storeIDList, fromTime, toTime, true)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -641,7 +647,11 @@ func (c *OrderManager) GetStoresOrderSaleInfoNew(ctx *jxcontext.Context, storeID
|
||||
orderMap = make(map[string]*model.GoodsOrder)
|
||||
orderSkuMap = make(map[string]*dao.OrderSkuWithActualPayPrice)
|
||||
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 {
|
||||
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.VendorPrice += v.VendorPrice * 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)
|
||||
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) {
|
||||
db := dao.GetDB()
|
||||
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
|
||||
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
|
||||
@@ -1157,6 +1175,7 @@ func GetOrdersAccept(ctx *jxcontext.Context, storeID int) (result []*OrderSkusAc
|
||||
AND b.status = ?
|
||||
AND b.order_created_at <= NOW() AND b.order_created_at >= ?
|
||||
GROUP BY 3
|
||||
ORDER BY sum_weight DESC
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
storeID,
|
||||
@@ -1166,3 +1185,57 @@ func GetOrdersAccept(ctx *jxcontext.Context, storeID int) (result []*OrderSkusAc
|
||||
err = dao.GetRows(db, &result, sql, sqlParams)
|
||||
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
|
||||
}
|
||||
|
||||
@@ -37,6 +37,13 @@ func (c *BaseScheduler) CreateWaybillOnProviders(ctx *jxcontext.Context, order *
|
||||
courierVendorID := storeCourier.VendorID
|
||||
bill, err2 := c.CreateWaybill(courierVendorID, order, maxDeliveryFee)
|
||||
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)
|
||||
bills = append(bills, bill)
|
||||
if createOnlyOne {
|
||||
|
||||
@@ -655,7 +655,7 @@ func (s *DefScheduler) isWaybillCourierSame(savedOrderInfo *WatchOrderInfo, bill
|
||||
|
||||
func (s *DefScheduler) addWaybill2Map(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) {
|
||||
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)
|
||||
}
|
||||
}
|
||||
@@ -1333,7 +1333,7 @@ func setFakeActualPayPrice(order *model.GoodsOrder) (newOrder *model.GoodsOrder)
|
||||
storeDetail, err := dao.GetStoreDetail(dao.GetDB(), order.JxStoreID, order.VendorID)
|
||||
if err == nil {
|
||||
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 {
|
||||
orderCopy.ActualPayPrice = order.EarningPrice
|
||||
}
|
||||
|
||||
@@ -297,6 +297,7 @@ func checkConfig(opFlag int, configType, key, value string) (err error) {
|
||||
err = checkSysConfig(key, value)
|
||||
}
|
||||
case model.ConfigTypeJxStore:
|
||||
case model.ConfigTypeCookie:
|
||||
default:
|
||||
err = fmt.Errorf("当前只支持配置:%s, 传入的配置类型:%s", utils.Format4Output(model.ConfigTypeName, true), configType)
|
||||
}
|
||||
|
||||
@@ -265,6 +265,13 @@ func ReorderCategories(ctx *jxcontext.Context, parentID int, categoryIDs []int,
|
||||
db := dao.GetDB()
|
||||
if err = dao.GetEntitiesByKV(db, &cats, utils.Params2Map(model.FieldParentID, parentID), false); err == nil {
|
||||
catsLen := len(cats)
|
||||
if !isExd {
|
||||
for _, v := range cats {
|
||||
if v.IsExdSpec == 1 {
|
||||
catsLen--
|
||||
}
|
||||
}
|
||||
}
|
||||
if catsLen != len(categoryIDs) {
|
||||
return ErrInputCatsDoesntMatch
|
||||
}
|
||||
@@ -385,9 +392,11 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku bool, params ma
|
||||
FROM sku_name t1
|
||||
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 price_refer_snapshot t4 ON t4.city_code = ? AND t4.snapshot_at = ? AND t4.sku_id = t2.id
|
||||
WHERE t1.deleted_at = ?`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
0, utils.Time2Date(time.Now().AddDate(0, 0, -1)),
|
||||
utils.DefaultTimeValue,
|
||||
}
|
||||
if keyword != "" {
|
||||
@@ -554,7 +563,8 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku bool, params ma
|
||||
t1.upc,
|
||||
t1.ex_prefix,
|
||||
t1.ex_prefix_begin,
|
||||
t1.ex_prefix_end`
|
||||
t1.ex_prefix_end,
|
||||
t4.mid_unit_price`
|
||||
if isBySku {
|
||||
sql += `,
|
||||
t2.id`
|
||||
@@ -588,10 +598,12 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku bool, params ma
|
||||
t1.ex_prefix,
|
||||
t1.ex_prefix_begin,
|
||||
t1.ex_prefix_end,
|
||||
t4.mid_unit_price,
|
||||
CONCAT("[", GROUP_CONCAT(DISTINCT CONCAT('{"id":', t2.id, ',"comment":"', t2.comment, '","status":', t2.status,
|
||||
',"createdAt":"', CONCAT(REPLACE(t2.created_at," ","T"),"+08:00"), '","updatedAt":"', CONCAT(REPLACE(t2.updated_at," ","T"),"+08:00"),
|
||||
'","lastOperator":"', t2.last_operator, '","specQuality":', t2.spec_quality, ',"specUnit":"', t2.spec_unit,
|
||||
'","exdSkuID":"', t2.exd_sku_id,
|
||||
'","eclpID":"', t2.eclp_id,
|
||||
'","weight":', t2.weight, ',"categoryID":', t2.category_id, ',"nameID":', t2.name_id,
|
||||
', "seq":', t2.seq,
|
||||
"}")), "]") skus_str,
|
||||
@@ -765,9 +777,11 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s
|
||||
dao.Rollback(db)
|
||||
return nil, err
|
||||
}
|
||||
if err = OnCreateThing(ctx, db, nil, int64(sku.ID), model.ThingTypeSku); err != nil {
|
||||
dao.Rollback(db)
|
||||
return nil, err
|
||||
if sku.EclpID == "" {
|
||||
if err = OnCreateThing(ctx, db, nil, int64(sku.ID), model.ThingTypeSku); err != nil {
|
||||
dao.Rollback(db)
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
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)
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
@@ -859,7 +876,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
|
||||
dao.Rollback(db)
|
||||
return 0, err
|
||||
}
|
||||
if !isExd {
|
||||
if !isExd && eclpID == "" {
|
||||
if err = OnUpdateThing(ctx, db, nil, int64(nameID), model.ThingTypeSkuName); err != nil {
|
||||
dao.Rollback(db)
|
||||
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 {
|
||||
for _, v := range skuList {
|
||||
sku := &v.Sku
|
||||
@@ -896,7 +913,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
|
||||
dao.Rollback(db)
|
||||
return 0, err
|
||||
}
|
||||
if sku.ExdSkuID == "" {
|
||||
if sku.ExdSkuID == "" && sku.EclpID == "" {
|
||||
if err = OnUpdateThing(ctx, db, nil, int64(v.ID), model.ThingTypeSku); err != nil {
|
||||
dao.Rollback(db)
|
||||
return 0, err
|
||||
@@ -956,7 +973,7 @@ func DeleteSkuName(ctx *jxcontext.Context, nameID int, userName string) (num int
|
||||
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 {
|
||||
for _, v := range skuList {
|
||||
sku := &v.Sku
|
||||
@@ -1084,7 +1101,7 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{}
|
||||
}
|
||||
return 0, err
|
||||
}
|
||||
if sku.ExdSkuID == "" {
|
||||
if sku.ExdSkuID == "" && sku.EclpID == "" {
|
||||
if err = OnUpdateThing(ctx, db, nil, int64(skuID), model.ThingTypeSku); err != nil {
|
||||
dao.Rollback(db)
|
||||
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) {
|
||||
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)
|
||||
for _, v := range list {
|
||||
storeID := v.StoreID
|
||||
storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDJX)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
storeSku := &model.StoreSkuBind{}
|
||||
storeSku.ID = v.BindID
|
||||
storeSku.JdSyncStatus = v.JdSyncStatus | model.SyncFlagPriceMask
|
||||
storeSku.MtwmSyncStatus = v.MtwmSyncStatus | model.SyncFlagPriceMask
|
||||
storeSku.EbaiSyncStatus = v.EbaiSyncStatus | model.SyncFlagPriceMask
|
||||
storeSku.Price = jxutils.CaculateSkuPrice(int(v.UnitPrice), v.SpecQuality, v.SpecUnit, v.Unit)
|
||||
storeSku.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), int(storeSku.Price))
|
||||
storeSku.LastOperator = ctx.GetUserName()
|
||||
storeSku.UpdatedAt = time.Now()
|
||||
dao.UpdateEntity(db, storeSku, "Price", "JdSyncStatus", "MtwmSyncStatus", "EbaiSyncStatus", "JxPrice")
|
||||
}
|
||||
dao.Commit(db)
|
||||
task := tasksch.NewParallelTask("refreshStoreSkuPrice", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
v := batchItemList[0].(*dao.StoreSkuAndName)
|
||||
storeID := v.StoreID
|
||||
storeDetail, _ := dao.GetStoreDetail(db, storeID, model.VendorIDJX)
|
||||
if storeDetail == nil {
|
||||
return retVal, err
|
||||
}
|
||||
storeSku := &model.StoreSkuBind{}
|
||||
storeSku.ID = v.BindID
|
||||
storeSku.JdSyncStatus = v.JdSyncStatus | model.SyncFlagPriceMask
|
||||
storeSku.MtwmSyncStatus = v.MtwmSyncStatus | model.SyncFlagPriceMask
|
||||
storeSku.EbaiSyncStatus = v.EbaiSyncStatus | model.SyncFlagPriceMask
|
||||
storeSku.Price = jxutils.CaculateSkuPrice(int(v.UnitPrice), v.SpecQuality, v.SpecUnit, v.Unit)
|
||||
storeSku.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), int(storeSku.Price))
|
||||
storeSku.LastOperator = ctx.GetUserName()
|
||||
storeSku.UpdatedAt = time.Now()
|
||||
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
|
||||
}
|
||||
|
||||
@@ -1404,7 +1426,7 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro
|
||||
payload["exPrefixEnd"] = nil
|
||||
_, err = UpdateSkuName(ctx, nameID, payload, false)
|
||||
} 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 skuList[0].ExPrefixBegin != nil {
|
||||
_, err = UpdateSkuName(ctx, nameID, payload, false)
|
||||
@@ -1437,7 +1459,7 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro
|
||||
case 1:
|
||||
if (now.Sub(toTimeP) <= 0 && now.Sub(fromTimeP) >= 0) || (now.Sub(fromTimeP) > 0 && now.Sub(toTimeP) > 0) {
|
||||
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 len(skuList) > 0 {
|
||||
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) {
|
||||
v := batchItemList[0].(*ebaiapi.ExianDaSkus)
|
||||
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
|
||||
}
|
||||
// sku := &model.Sku{}
|
||||
// sku.ExdSkuID = v.ElemeGoodsID
|
||||
// sku.DeletedAt = utils.DefaultTimeValue
|
||||
// dao.GetEntity(db, sku, "ExdSkuID","DeletedAt")
|
||||
skuNameExt := &model.SkuName{}
|
||||
sql2 := `
|
||||
SELECT a.*
|
||||
FROM sku_name a
|
||||
JOIN sku b ON b.name_id = a.id
|
||||
WHERE a.upc = ?
|
||||
AND a.deleted_at = ? AND b.deleted_at = ?
|
||||
`
|
||||
sqlParams2 := []interface{}{
|
||||
skus.UpcIds,
|
||||
skus.UpcIds[0],
|
||||
utils.DefaultTimeValue, utils.DefaultTimeValue,
|
||||
}
|
||||
dao.GetRow(db, skuNameExt, sql2, sqlParams2)
|
||||
prefix, _, _, specUnit, unit, specQuality := jxutils.SplitSkuName(v.GoodsName)
|
||||
@@ -1521,16 +1550,6 @@ func SumExianDaDepot(ctx *jxcontext.Context, isAsync, isContinueWhenError bool)
|
||||
}
|
||||
}
|
||||
} 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{
|
||||
Prefix: prefix,
|
||||
Name: v.GoodsName,
|
||||
@@ -1543,11 +1562,7 @@ func SumExianDaDepot(ctx *jxcontext.Context, isAsync, isContinueWhenError bool)
|
||||
Upc: &v.UpcID,
|
||||
Status: model.SkuStatusNormal,
|
||||
}
|
||||
if skuCat.ID != 0 {
|
||||
skuName.CategoryID = skuCat.ID
|
||||
} else {
|
||||
skuName.CategoryID = 35 //默认给了个分类
|
||||
}
|
||||
skuName.CategoryID = 35 //默认给了个分类
|
||||
dao.WrapAddIDCULDEntity(skuName, ctx.GetUserName())
|
||||
err = dao.CreateEntity(db, skuName)
|
||||
if err != nil {
|
||||
@@ -1600,7 +1615,6 @@ func UpdateExianDaSkuCategory(ctx *jxcontext.Context, isAsync, isContinueWhenErr
|
||||
WHERE b.exd_sku_id <> ''
|
||||
AND a.deleted_at = ?
|
||||
AND b.deleted_at = ?
|
||||
AND a.category_id = 35
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue, utils.DefaultTimeValue,
|
||||
|
||||
@@ -2369,18 +2369,21 @@ func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64, needWalkDi
|
||||
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 <> ?
|
||||
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
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
model.VendorIDJX, utils.DefaultTimeValue, model.StoreStatusDisabled,
|
||||
utils.DefaultTimeValue, model.StoreStatusDisabled, jxutils.StandardCoordinate2Int(lng1), jxutils.StandardCoordinate2Int(lng2), jxutils.StandardCoordinate2Int(lat1), jxutils.StandardCoordinate2Int(lat2),
|
||||
model.YES,
|
||||
}
|
||||
|
||||
var storeList1 []*Store4User
|
||||
if err = dao.GetRows(dao.GetDB(), &storeList1, sql, sqlParams...); err == nil {
|
||||
var storeList2 []*Store4User
|
||||
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
|
||||
storeList2 = append(storeList2, v)
|
||||
}
|
||||
@@ -2388,19 +2391,28 @@ func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64, needWalkDi
|
||||
|
||||
// 为了审核用
|
||||
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{}{
|
||||
model.VendorIDJX, utils.DefaultTimeValue, model.StoreStatusDisabled,
|
||||
// model.VendorIDJX, utils.DefaultTimeValue, model.StoreStatusDisabled,
|
||||
utils.DefaultTimeValue,
|
||||
model.StoreStatusDisabled,
|
||||
jxutils.StandardCoordinate2Int(0),
|
||||
jxutils.StandardCoordinate2Int(10000),
|
||||
jxutils.StandardCoordinate2Int(0),
|
||||
jxutils.StandardCoordinate2Int(10000),
|
||||
}
|
||||
dao.GetRows(dao.GetDB(), &storeList2, sql, sqlParams2...)
|
||||
if len(storeList2) > 1 {
|
||||
storeList2 = storeList2[:1]
|
||||
// jxutils.StandardCoordinate2Int(0),
|
||||
// jxutils.StandardCoordinate2Int(10000),
|
||||
// jxutils.StandardCoordinate2Int(0),
|
||||
// jxutils.StandardCoordinate2Int(10000),
|
||||
// model.YES,
|
||||
102919, //商城模板店
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
@@ -191,6 +191,13 @@ type tUpdateSkuSpecTag struct {
|
||||
IsSpec int `json:"isSpec"`
|
||||
}
|
||||
|
||||
type MatterStock struct {
|
||||
SkuID int `json:"skuID"`
|
||||
SkuNameID int `json:"skuNameID"`
|
||||
Name string `json:"name"`
|
||||
Stock int `json:"stock"`
|
||||
}
|
||||
|
||||
const (
|
||||
maxStoreNameBind = 10000 // 最大门店SkuName bind个数
|
||||
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) {
|
||||
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 = `
|
||||
FROM sku_name t1
|
||||
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),
|
||||
// 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 {
|
||||
sql += " AND ((t2.status = ? AND t1.status = ?) OR t4.status = ?)"
|
||||
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
|
||||
}
|
||||
|
||||
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) {
|
||||
return GetStoresSkusNew(ctx, storeIDs, skuIDs, isFocus, keyword, isBySku, isAct, params, offset, pageSize)
|
||||
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, 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) {
|
||||
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))
|
||||
}
|
||||
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 {
|
||||
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,
|
||||
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.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.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,
|
||||
@@ -523,6 +533,9 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bo
|
||||
t4.status_sale_begin, t4.status_sale_end,
|
||||
t6.mid_unit_price real_mid_unit_price
|
||||
` + sql
|
||||
if isHighPrice {
|
||||
sql += " , t4.unit_price DESC LIMIT 99"
|
||||
}
|
||||
var tmpList []*tGetStoresSkusInfo
|
||||
beginTime := time.Now()
|
||||
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
|
||||
}
|
||||
|
||||
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 {
|
||||
return storeSkuNameExt, err
|
||||
return storeSkuNameExt2, err
|
||||
}
|
||||
db := dao.GetDB()
|
||||
storeSkuNameExt, err = dao.GetTopSkusByStoreIDs(db, storeIDs)
|
||||
storeSkuNameExt, err := dao.GetTopSkusByStoreIDs(db, storeIDs)
|
||||
if err != nil {
|
||||
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) {
|
||||
@@ -2371,7 +2407,7 @@ func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNam
|
||||
var skuList []*model.SkuAndName
|
||||
storeSkuSyncInfo, _ := dao.GetStoreSkusAndSkuName(db, []int{storeID}, nil, []int{v.ID})
|
||||
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)
|
||||
skuList = append(skuList, sku...)
|
||||
}
|
||||
@@ -2984,7 +3020,7 @@ func FocusStoreSkusByExcelBin(ctx *jxcontext.Context, reader io.Reader, isAsync,
|
||||
for k, _ := range skuMap {
|
||||
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, "")
|
||||
if err != nil && len(skuList) == 0 {
|
||||
return result, err
|
||||
@@ -3097,7 +3133,7 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBindInf
|
||||
if err != nil {
|
||||
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 {
|
||||
return retVal, err
|
||||
}
|
||||
@@ -3173,6 +3209,9 @@ func AutoFocusStoreSkusForTopSkus(ctx *jxcontext.Context, isAsync, isContinueWhe
|
||||
skuName []*model.SkuName
|
||||
skuNameMap = make(map[int]int)
|
||||
)
|
||||
if v.ID == model.MatterStoreID {
|
||||
return retVal, err
|
||||
}
|
||||
sql := `
|
||||
SELECT DISTINCT a.name_id id
|
||||
FROM sku a
|
||||
@@ -3283,7 +3322,7 @@ func AutoFocusStoreSkusWithoutFocus(ctx *jxcontext.Context, skuIDs []int, isSync
|
||||
}
|
||||
var skuBindSkuList []*StoreSkuBindSkuInfo
|
||||
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) {
|
||||
for _, skus := range v.Skus {
|
||||
skuMap[skus.SkuID] = 1
|
||||
@@ -3369,10 +3408,13 @@ func UpdateStoreSkusSpecTagBin(ctx *jxcontext.Context, reader io.Reader, vendorI
|
||||
}
|
||||
for _, v := range results {
|
||||
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 {
|
||||
continue
|
||||
}
|
||||
food, err := api.MtwmAPI.RetailGet(store.VendorStoreID, utils.Int2Str(v.SkuID))
|
||||
if err != nil || food == nil {
|
||||
continue
|
||||
}
|
||||
var foodData = make(map[string]interface{})
|
||||
if v.IsSpec != 0 && v.IsSpec == -1 {
|
||||
v.IsSpec = 0
|
||||
@@ -3556,7 +3598,7 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i
|
||||
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 (
|
||||
db = dao.GetDB()
|
||||
jdMap = make(map[int][]*JdStoreSkus)
|
||||
@@ -3572,6 +3614,8 @@ func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus,
|
||||
pricePercentagePack []*model.PricePercentageItem
|
||||
cats []*model.ThingMap
|
||||
skus []*model.SkuAndName
|
||||
vendorPrice int
|
||||
specQuality float64
|
||||
)
|
||||
sql := `
|
||||
SELECT t1.*
|
||||
@@ -3586,7 +3630,7 @@ func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus,
|
||||
}
|
||||
err = dao.GetRows(db, &cats, sql, sqlParams...)
|
||||
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 {
|
||||
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)
|
||||
}
|
||||
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{
|
||||
JdSkuID: skus[0].NameID,
|
||||
Price: jxPrice,
|
||||
@@ -3621,7 +3678,16 @@ func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus,
|
||||
for kk, vv := range v {
|
||||
result, err := dao.GetStoreSkuBindByNameID(db, k, kk, model.SkuStatusNormal)
|
||||
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{
|
||||
StoreID: k,
|
||||
NameID: kk,
|
||||
@@ -3636,14 +3702,29 @@ func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus,
|
||||
for _, v := range jdStoreSkus {
|
||||
var (
|
||||
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 {
|
||||
continue
|
||||
}
|
||||
store, _ := dao.GetStoreDetail(db, v.JdStoreID, vendorID)
|
||||
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{
|
||||
JdSkuID: skus[0].NameID,
|
||||
Price: jxPrice,
|
||||
@@ -3666,7 +3747,16 @@ func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus,
|
||||
for kk, vv := range v {
|
||||
result, err := dao.GetStoreSkuBindByNameID(db, k, kk, model.SkuStatusNormal)
|
||||
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{
|
||||
StoreID: k,
|
||||
NameID: kk,
|
||||
@@ -3693,3 +3783,268 @@ func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus,
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
@@ -433,7 +433,7 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin
|
||||
func FilterJxDepotUnSaleSkuID() {
|
||||
db := dao.GetDB()
|
||||
filterJxDepotUnSaleSkuIds = filterJxDepotUnSaleSkuIds[0:0]
|
||||
skuList, _ := dao.GetSkus(db, filterVendorDepotUnSaleSkuIds, []int{}, []int{}, []int{})
|
||||
skuList, _ := dao.GetSkus(db, filterVendorDepotUnSaleSkuIds, []int{}, []int{}, []int{}, nil)
|
||||
filterJxSkuInfoMap2 := GetFilterJxSkuInfoMap2(skuList)
|
||||
for skuid, jxSkuInfo := range filterJxSkuInfoMap2 {
|
||||
//过滤掉平台库下架,且京西库下架的商品,为下面比较门店商品用
|
||||
@@ -456,7 +456,7 @@ func CompareJxAndMultiVenderDepot(ctx *jxcontext.Context, vendorMap map[int]bool
|
||||
FilterJxDepotUnSaleSkuID()
|
||||
filterVendorSkuInfoMap := GetFilterVendorSkuInfoMap(skuNameInfoList)
|
||||
skuNameInfoList = skuNameInfoList[0:0]
|
||||
skuList, _ := dao.GetSkus(db, []int{}, []int{}, []int{}, []int{})
|
||||
skuList, _ := dao.GetSkus(db, []int{}, []int{}, []int{}, []int{}, nil)
|
||||
filterJxSkuInfoMap2 := GetFilterJxSkuInfoMap2(skuList)
|
||||
for skuid, jxSkuInfo := range filterJxSkuInfoMap2 {
|
||||
var jxSkuDetailName string
|
||||
@@ -571,7 +571,7 @@ func CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int,
|
||||
}
|
||||
} else {
|
||||
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]
|
||||
singleFlag = true
|
||||
}
|
||||
|
||||
@@ -660,8 +660,10 @@ func buildSetFinishHook(task tasksch.ITask, ctx *jxcontext.Context) {
|
||||
}
|
||||
if authInfo, err := ctx.GetV2AuthInfo(); err == nil {
|
||||
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 {
|
||||
downloadURL, _, _ := WirteToExcelBySyncFailed(task)
|
||||
user, err := dao.GetUserByID(dao.GetDB(), "mobile", "18160030913")
|
||||
|
||||
@@ -378,7 +378,7 @@ func CreateUser(user *model.User, creatorName string) (err error) {
|
||||
dao.WrapAddIDCULDEntity(user, creatorName)
|
||||
user.UserID = utils.GetUUID()
|
||||
user.Status = model.UserStatusNormal
|
||||
user.DividePercentage = 5
|
||||
user.DividePercentage = 1
|
||||
return dao.CreateEntity(nil, user)
|
||||
}
|
||||
|
||||
@@ -1054,3 +1054,31 @@ func DeleteUserInfo(ctx *jxcontext.Context, userID string) (err error) {
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"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 = utils.LimitUTF8StringLen(jsonData, 3200)
|
||||
errMsg = utils.LimitUTF8StringLen(errMsg, 3200)
|
||||
errMsg = utils.LimitUTF8StringLen(errMsg, 9999)
|
||||
event := &model.OperateEvent{
|
||||
CreatedAt: time.Now(),
|
||||
LastOperator: ctx.GetUserName(),
|
||||
@@ -140,6 +142,7 @@ func GetCheckVendorCookie(ctx *jxcontext.Context, vendorIDs []int, isAuto bool)
|
||||
var (
|
||||
ebaiOrderID = "1577329467196263592"
|
||||
ebaiErr = "return not json"
|
||||
ebaiErr2 = "系统错误"
|
||||
mtStoreID = "7388603"
|
||||
mtErr = "返回结果格式不正常"
|
||||
jdUpcCode = "6952395700895"
|
||||
@@ -157,11 +160,31 @@ func GetCheckVendorCookie(ctx *jxcontext.Context, vendorIDs []int, isAuto bool)
|
||||
case model.VendorIDEBAI:
|
||||
resultMap, err := api.EbaiAPI.GetStoreOrderInfo(ebaiOrderID)
|
||||
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)
|
||||
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:
|
||||
_, err := api.MtwmAPI.PackagePriceGet(mtStoreID)
|
||||
if err != nil {
|
||||
@@ -178,6 +201,16 @@ func GetCheckVendorCookie(ctx *jxcontext.Context, vendorIDs []int, isAuto bool)
|
||||
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.VendorOrgCode = vv
|
||||
@@ -189,24 +222,6 @@ func GetCheckVendorCookie(ctx *jxcontext.Context, vendorIDs []int, isAuto bool)
|
||||
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 != "" {
|
||||
globals.SugarLogger.Warnf("GetCheckVendorCookie:[%v]", errMsg)
|
||||
|
||||
@@ -6,7 +6,10 @@ import (
|
||||
"sync"
|
||||
"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/globals/api"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jxstore/event"
|
||||
|
||||
@@ -103,7 +106,23 @@ var (
|
||||
cms.AutoSaleAtStr,
|
||||
}
|
||||
|
||||
backUpStoreSkuBindList = []string{
|
||||
"23:30:00",
|
||||
}
|
||||
|
||||
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 {
|
||||
@@ -180,25 +199,76 @@ func Init() {
|
||||
ScheduleTimerFunc("AutoPayForPopluarMan", func() {
|
||||
localjx.AutoPayForPopluarMan(jxcontext.AdminCtx)
|
||||
}, autoPayForPopluarManList)
|
||||
ScheduleTimerFunc("CancelPayTimeOutOrder", func() {
|
||||
localjx.CancelPayTimeOutOrder(jxcontext.AdminCtx)
|
||||
}, cancelPayTimeOutOrderList)
|
||||
ScheduleTimerFunc("BackUpStoreSkuBind", func() {
|
||||
cms.BackUpStoreSkuBind(jxcontext.AdminCtx, true, true)
|
||||
}, backUpStoreSkuBindList)
|
||||
}
|
||||
ScheduleTimerFunc("AutoSaleStoreSku", func() {
|
||||
cms.AutoSaleStoreSku(jxcontext.AdminCtx, nil, false)
|
||||
}, autoSaleStoreSkuTimeList)
|
||||
|
||||
if beego.BConfig.RunMode == "beta" {
|
||||
ScheduleTimerFunc("CancelPayTimeOutOrder", func() {
|
||||
localjx.CancelPayTimeOutOrder(jxcontext.AdminCtx)
|
||||
}, cancelPayTimeOutOrderList)
|
||||
ScheduleTimerFunc("GetAndStoreCitiesShops", func() {
|
||||
netspider.GetAndStoreCitiesShops(jxcontext.AdminCtx, nil, nil, 0, 0, false, false)
|
||||
}, []string{
|
||||
"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() {
|
||||
syncFlag := model.SyncFlagPriceMask
|
||||
if (time.Now().Unix()/24*3600)%10 == 0 {
|
||||
syncFlag |= model.SyncFlagSaleMask
|
||||
}
|
||||
syncFlag := 0
|
||||
// syncFlag := model.SyncFlagPriceMask
|
||||
// if (time.Now().Unix()/24*3600)%10 == 0 {
|
||||
// syncFlag |= model.SyncFlagSaleMask
|
||||
// }
|
||||
task := tasksch.NewParallelTask("同步京西与平台数据", nil, jxcontext.AdminCtx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
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)
|
||||
errList.AddErr(err)
|
||||
case 1:
|
||||
// errList.AddErr(cms.SetSingleStoreSkuSyncModifyStatus(db, []int{3}))
|
||||
|
||||
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)
|
||||
errList.AddErr(err)
|
||||
|
||||
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)
|
||||
|
||||
errList.AddErr(err2)
|
||||
SaveImportantTaskID(TaskNameSyncStoreSku, taskID)
|
||||
}
|
||||
@@ -246,7 +321,7 @@ func doDailyWork() {
|
||||
cms.CurVendorSync.SyncStore2(jxcontext.AdminCtx, dao.GetDB(), nil, nil, true, true)
|
||||
|
||||
syncStoreSku()
|
||||
|
||||
localjx.RefreshAllMatterOrderStatus(jxcontext.AdminCtx)
|
||||
InitEx()
|
||||
|
||||
// 每天补全前一天与当天的订单
|
||||
|
||||
@@ -133,7 +133,7 @@ func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales
|
||||
//输出商品销量统计结果
|
||||
skuAndNameMapData := make(map[int]*model.SkuAndName)
|
||||
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 {
|
||||
for _, value := range skuAndNameList {
|
||||
skuAndNameMapData[value.ID] = value
|
||||
@@ -149,7 +149,7 @@ func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales
|
||||
if storeSkuInfo != nil {
|
||||
skuName := storeSkuInfo.SkuName
|
||||
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.SkuPrice = jxutils.IntPrice2StandardCurrencyString(int64(storeSkuInfo.Skus[0].BindPrice))
|
||||
} else if skuAndNameInfo != nil {
|
||||
@@ -159,7 +159,7 @@ func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales
|
||||
storeSkuSales.SkuImage = skuNameList[0].Img
|
||||
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"
|
||||
} else {
|
||||
storeSkuSales.SkuName = "N/A"
|
||||
|
||||
@@ -312,7 +312,7 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, is
|
||||
//如果微盟商品里找得到excel中的商品
|
||||
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 {
|
||||
outPutData := DataFailed{
|
||||
GoodsID: spuCode,
|
||||
|
||||
@@ -13,7 +13,9 @@ import (
|
||||
const (
|
||||
EventCategory = "sys"
|
||||
|
||||
EventTypeWXToken = "wxToken"
|
||||
EventTypeWXToken = "wxToken"
|
||||
EventTypeWX2Token = "wx2Token"
|
||||
|
||||
EventTypeYLYToken = "ylyToken"
|
||||
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) {
|
||||
h.eventHub.PostNewEvent(EventCategory, &eventhub.EventInfo{
|
||||
Type: EventTypeYLYToken,
|
||||
@@ -82,7 +91,10 @@ func (h *Hub) GetToken(tokenType, oldToken string, waitTime time.Duration) (toke
|
||||
if weimobToken := api.WeimobAPI.GetToken(); weimobToken != nil {
|
||||
token = string(utils.MustMarshal(weimobToken))
|
||||
}
|
||||
case EventTypeWX2Token:
|
||||
token = api.WeixinMiniAPI2.CBGetToken()
|
||||
}
|
||||
|
||||
if token != oldToken {
|
||||
tokenInfo = &TokenInfo{
|
||||
IsNew: false,
|
||||
@@ -105,6 +117,10 @@ func (h *Hub) GetWXToken(oldToken string, waitTime time.Duration) (tokenInfo *To
|
||||
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) {
|
||||
return h.GetToken(EventTypeYLYToken, oldToken, waitTime)
|
||||
}
|
||||
|
||||
@@ -540,6 +540,15 @@ func RefreshOrderSkuRelated(order *model.GoodsOrder) *model.GoodsOrder {
|
||||
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 {
|
||||
afsOrder.SkuUserMoney = 0
|
||||
afsOrder.PmSkuSubsidyMoney = 0
|
||||
|
||||
@@ -271,7 +271,7 @@ func CaculateSkuActVendorPrice(price, percentage, priceAdd int) (vendorPrice int
|
||||
func CaculateSkuVendorPrice(price, percentage, priceAdd int) (vendorPrice int) {
|
||||
percentage = ConstrainPricePercentage(percentage)
|
||||
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 {
|
||||
vendorPrice = 1
|
||||
}
|
||||
|
||||
@@ -144,6 +144,7 @@ func BindPrinter(ctx *jxcontext.Context, storeID int, data string) (printResult
|
||||
store.PrinterKey = bindResult.PrinterKey
|
||||
store.PrinterBindInfo = string(utils.MustMarshal(bindResult))
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
errList := errlist.New()
|
||||
mobileList = jxutils.StringMap2List(jxutils.StringList2Map(mobileList))
|
||||
@@ -42,6 +42,8 @@ func SendSMSMsg(mobileList []string, signName, templateCode string, templatePara
|
||||
} else {
|
||||
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) {
|
||||
err = SendSMSMsg(getOrderNotifyPhone(order), globals.SMSSignName, globals.SMSNewOrderTemplate, map[string]interface{}{
|
||||
"daySeq": order.OrderSeq,
|
||||
"consigneeName": order.ConsigneeName,
|
||||
"payMoney": jxutils.IntPrice2StandardString(order.ActualPayPrice),
|
||||
})
|
||||
if isPushSMS(order) {
|
||||
err = SendSMSMsg(getOrderNotifyPhone(order), globals.SMSSignName, globals.SMSNewOrderTemplate, map[string]interface{}{
|
||||
"daySeq": order.OrderSeq,
|
||||
"consigneeName": order.ConsigneeName,
|
||||
"payMoney": jxutils.IntPrice2StandardString(order.ActualPayPrice),
|
||||
}, order)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -69,6 +73,29 @@ func NotifyOrderCanceled(order *model.GoodsOrder) (err error) {
|
||||
"vendorName": model.VendorChineseNames[order.VendorID],
|
||||
"seq": order.OrderSeq,
|
||||
"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
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ func RefreshConfig(configKey string, expiresTime time.Duration, configGetter fun
|
||||
if handleType != 0 {
|
||||
if curConfig.Token, curConfig.Date = configGetter(); curConfig.Token == "" {
|
||||
if globals.IsProductEnv() {
|
||||
globals.SugarLogger.Errorf("RefreshConfig %s get empty token", configKey)
|
||||
globals.SugarLogger.Infof("RefreshConfig %s get empty token", configKey)
|
||||
sleepDuration = errRefreshGap
|
||||
} else {
|
||||
globals.SugarLogger.Infof("RefreshConfig %s get empty token", configKey)
|
||||
@@ -138,6 +138,33 @@ func RefreshWeixinToken() (err error) {
|
||||
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) {
|
||||
if api.WeimobAPI != nil {
|
||||
err = RefreshConfig("weimob", weimobTokenExpires, func() (token string, expireTimeStr string) {
|
||||
@@ -145,6 +172,8 @@ func RefreshWeimobToken() (err error) {
|
||||
if globals.IsMainProductEnv() {
|
||||
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))
|
||||
} else {
|
||||
globals.SugarLogger.Debugf("RefreshWeimobToken err:%s", err)
|
||||
}
|
||||
} else {
|
||||
curToken := ""
|
||||
@@ -277,6 +306,15 @@ func getWXTokenFromRemote(oldToken string) (tokenInfo *syseventhub.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) {
|
||||
if !globals.IsMainProductEnv() && globals.GetWeixinTokenKey != "" && globals.GetYLYTokenURL != "" {
|
||||
tokenInfo = PollingRemotEvent(globals.GetYLYTokenURL, 0, map[string]interface{}{
|
||||
|
||||
@@ -14,6 +14,7 @@ const (
|
||||
VendorIDMTWM = 1
|
||||
VendorIDELM = 2
|
||||
VendorIDEBAI = 3
|
||||
VendorIDYB = 4 //银豹
|
||||
VendorIDWSC = 11 // 微盟微商城
|
||||
VendorIDPurchaseEnd = 11
|
||||
VendorIDJX = 9 // 这是一个假的京西VendorID
|
||||
@@ -45,6 +46,8 @@ const (
|
||||
VendorIDAutonavi = 321 // 高德导航
|
||||
VendorIDQiNiuCloud = 323 // 七牛云
|
||||
VendorIDShowAPI = 325 // 万维易源
|
||||
|
||||
VendorIDJDWL = 401 //京东物流
|
||||
)
|
||||
|
||||
type VendorInfo struct {
|
||||
@@ -65,6 +68,7 @@ var (
|
||||
VendorIDELM: "Elm",
|
||||
VendorIDEBAI: "Ebai",
|
||||
VendorIDWSC: "Wsc",
|
||||
VendorIDYB: "YinBao",
|
||||
VendorIDJX: "Jx",
|
||||
|
||||
VendorIDDada: "Dada",
|
||||
@@ -90,11 +94,13 @@ var (
|
||||
VendorIDMTWM: "美团外卖",
|
||||
VendorIDELM: "饿了么",
|
||||
VendorIDEBAI: "饿百新零售",
|
||||
VendorIDYB: "银豹",
|
||||
VendorIDWSC: "微盟微商城",
|
||||
VendorIDJX: "京西商城",
|
||||
|
||||
VendorIDDada: "达达众包",
|
||||
VendorIDMTPS: "美团配送",
|
||||
VendorIDJDWL: "京东物流",
|
||||
|
||||
VendorIDFeiE: "飞鹅",
|
||||
VendorIDXiaoWM: "外卖管家",
|
||||
|
||||
@@ -138,6 +138,7 @@ var (
|
||||
"Login": "登录",
|
||||
"RegisterUser": "注册",
|
||||
"AutoPayForPopluarMan": "每日订单打款",
|
||||
"SyncStoresQualify": "上传门店营业资质",
|
||||
}
|
||||
|
||||
MultiStoresVendorMap = map[int]int{
|
||||
|
||||
@@ -26,7 +26,9 @@ type StoresOrderSaleInfo struct {
|
||||
SalePrice int64 `json:"salePrice"`
|
||||
ActualPayPrice int64 `json:"actualPayPrice"`
|
||||
|
||||
EarningPrice int64 `json:"earningPrice"` // 预估结算给门店老板的钱
|
||||
EarningPrice int64 `json:"earningPrice"` // 预估结算给门店老板的钱
|
||||
NewEarningPrice int64 `json:"newEarningPrice"` // 预估结算给门店老板的钱(新规则)
|
||||
|
||||
DistanceFreightMoney int64 `json:"distanceFreightMoney"` // 商户承担的远距离配送费(当前只有京东到家有值)
|
||||
WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费
|
||||
}
|
||||
@@ -41,7 +43,8 @@ type OrderSkuWithActualPayPrice struct {
|
||||
StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid
|
||||
Status int `json:"status"` // 参见OrderStatus*相关的常量定义
|
||||
|
||||
PayPercentage int `json:"payPercentage"`
|
||||
PayPercentage int `json:"payPercentage"`
|
||||
NewEarningPrice int64 `json:"newEarningPrice"`
|
||||
}
|
||||
|
||||
type tGoodsAndOrder struct {
|
||||
@@ -356,7 +359,7 @@ func GetStoreOrderSkuList(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAt
|
||||
// order_finished_at
|
||||
sql := `
|
||||
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
|
||||
FROM order_sku t1
|
||||
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) {
|
||||
sql := `
|
||||
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
|
||||
FROM order_sku t1
|
||||
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...)
|
||||
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
|
||||
}
|
||||
|
||||
@@ -307,7 +307,7 @@ func GetPriceReferSnapshot(db *DaoDB, cityCodes, skuIDs []int, skuNameID int, sn
|
||||
totalCount = GetLastTotalRowCount(db)
|
||||
}
|
||||
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
|
||||
if len(skuList) > 0 {
|
||||
skuAndName := skuList[0]
|
||||
|
||||
@@ -76,7 +76,7 @@ func GetCategories(db *DaoDB, parentID, level int, catIDs []int, isExd bool) (ca
|
||||
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 := `
|
||||
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
|
||||
@@ -110,6 +110,10 @@ func GetSkus(db *DaoDB, skuIDs, nameIDs, statuss, catIDs []int) (skuList []*mode
|
||||
sqlWhere += " OR t3p.id IN (" + GenQuestionMarks(len(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
|
||||
if err = GetRows(db, &skuList, sql, sqlParams...); err == 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) {
|
||||
skuList, err := GetSkus(db, nil, nameIDs, nil, nil)
|
||||
skuList, err := GetSkus(db, nil, nameIDs, nil, nil, nil)
|
||||
if err == nil {
|
||||
for _, sku := range skuList {
|
||||
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) {
|
||||
skuExList, err := GetSkus(db, nil, nil, nil, catIDs)
|
||||
skuExList, err := GetSkus(db, nil, nil, nil, catIDs, nil)
|
||||
if err == nil {
|
||||
for _, v := range skuExList {
|
||||
skuList = append(skuList, &v.Sku)
|
||||
|
||||
@@ -45,6 +45,7 @@ type StoreDetail struct {
|
||||
OperatorName3 string `json:"operatorName3"`
|
||||
|
||||
JdStoreLevel string `json:"jdStoreLevel"` //京东门店等级
|
||||
IsOrder int `json:"isOrder"` //是否是下预订单门店
|
||||
}
|
||||
|
||||
// 带快递门店信息的
|
||||
@@ -88,7 +89,7 @@ func getStoreDetail(db *DaoDB, storeID, vendorID int, vendorStoreID string) (sto
|
||||
sql := `
|
||||
SELECT t1.*,
|
||||
t2.vendor_store_id, t2.status vendor_status, t2.delivery_fee_deduction_sill, t2.delivery_fee_deduction_fee, t2.sync_status, t2.vendor_org_code,
|
||||
t2.price_percentage, t2.auto_pickup, t2.delivery_type, t2.delivery_competition, t2.is_sync, t2.vendor_store_name,
|
||||
t2.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,
|
||||
t4.value freight_deduction_pack_str,
|
||||
district.name district_name,
|
||||
|
||||
@@ -148,6 +148,7 @@ type StoreSkuNameExt struct {
|
||||
PendingOpType int8 `json:"pendingOpType"` // 取值同 StoreOpRequest.Type
|
||||
PendingUnitPrice int `json:"pendingUnitPrice"` // 这个是待审核的价格申请
|
||||
RealMidUnitPrice int `json:"realMidUnitPrice"`
|
||||
Count int `json:"count"`
|
||||
}
|
||||
|
||||
// GetStoreSkus用
|
||||
@@ -232,6 +233,8 @@ type StoreSkuExt struct {
|
||||
|
||||
EarningPrice int `json:"earningPrice"`
|
||||
EarningActID int `orm:"column(earning_act_id)" json:"earningActID"`
|
||||
|
||||
EclpID string `orm:"column(eclp_id)" json:"eclpID"`
|
||||
}
|
||||
|
||||
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) {
|
||||
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(
|
||||
SELECT SUM(b.count) count,c.id,a.store_id,d.name store_name
|
||||
FROM goods_order a
|
||||
@@ -995,8 +998,8 @@ func GetTopSkusByStoreIDs(db *DaoDB, storeIDs []int) (storeSkuNameExt []*StoreSk
|
||||
GROUP BY 2,3,4)t1
|
||||
JOIN sku t2 ON t2.id = t1.id
|
||||
JOIN sku_name t3 ON t3.id = t2.name_id
|
||||
UNION ALL
|
||||
SELECT 2 s, 0 count, a.sku_id, g.*, a.store_id, e.name store_name
|
||||
UNION
|
||||
SELECT 0 count, a.sku_id, g.*, a.store_id, e.name store_name
|
||||
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_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.deleted_at = ?
|
||||
AND (d.type = ? OR d.type = ?)
|
||||
ORDER BY 1,2 DESC
|
||||
ORDER BY 1 DESC
|
||||
LIMIT ?
|
||||
`
|
||||
sqlParams = append(sqlParams, model.StoreSkuBindStatusNormal, utils.DefaultTimeValue, model.ActSkuDirectDown, model.ActSkuSecKill, 30)
|
||||
|
||||
@@ -11,7 +11,7 @@ type OperateEvent struct {
|
||||
APIFunction string `orm:"column(api_function)" json:"apiFunction"`
|
||||
JsonData string `orm:"size(3200)" json:"jsonData"`
|
||||
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"`
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ const (
|
||||
ConfigTypeBank = "Bank"
|
||||
ConfigTypeRole = "Role"
|
||||
ConfigTypeJxStore = "JxStore"
|
||||
ConfigTypeCookie = "Cookie"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -24,6 +25,7 @@ var (
|
||||
ConfigTypeBank: "银行",
|
||||
ConfigTypeRole: "角色",
|
||||
ConfigTypeJxStore: "京西商城",
|
||||
ConfigTypeCookie: "Cookie",
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ const (
|
||||
|
||||
const (
|
||||
PayTypeWX = 1 // 微信支付
|
||||
PayTypeTL = 2 // 通联宝支付
|
||||
|
||||
PayStatusNo = 0
|
||||
PayStatusYes = 1
|
||||
@@ -63,6 +64,7 @@ type GoodsOrder struct {
|
||||
DistanceFreightMoney int64 `json:"distanceFreightMoney"` // 商户承担的远距离配送费(当前只有京东到家有值)
|
||||
WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费
|
||||
EarningPrice int64 `json:"earningPrice"` // 结算给门店老板的钱(未扣除可能的三方配送费)
|
||||
NewEarningPrice int64 `json:"newEarningPrice"` // 结算给门店老板的钱(未扣除可能的三方配送费)(新规则)
|
||||
Weight int `json:"weight"` // 单位为克
|
||||
VendorUserID string `orm:"column(vendor_user_id);size(48)" json:"vendorUserID"`
|
||||
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"` // 发票纳税人识别码
|
||||
InvoiceEmail string `orm:"size(64)" json:"invoiceEmail"` // 发票邮箱
|
||||
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:"-"`
|
||||
@@ -317,7 +322,7 @@ type OrderPay struct {
|
||||
|
||||
PrepayID string `orm:"column(prepay_id);index;size(48)" json:"prepayID"` // 下单后,支付前,支付方生成的事务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:"-"`
|
||||
}
|
||||
|
||||
|
||||
@@ -228,8 +228,9 @@ type Sku struct {
|
||||
Status int `json:"status"`
|
||||
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"`
|
||||
EclpID string `orm:"column(eclp_id)" json:"eclpID"` //eclp物料商品ID
|
||||
// JdID int64 `orm:"column(jd_id);null;index" json:"jdID"`
|
||||
// JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
|
||||
|
||||
@@ -281,9 +282,10 @@ type SkuWithVendor struct {
|
||||
|
||||
type SkuNameExt struct {
|
||||
SkuName
|
||||
Skus []*SkuWithVendor `orm:"-" json:"skus"`
|
||||
SkusStr string `json:"-"`
|
||||
FullName string `json:"fullName"`
|
||||
Places []int `orm:"-" json:"places"`
|
||||
PlacesStr string `json:"-"`
|
||||
Skus []*SkuWithVendor `orm:"-" json:"skus"`
|
||||
SkusStr string `json:"-"`
|
||||
FullName string `json:"fullName"`
|
||||
Places []int `orm:"-" json:"places"`
|
||||
PlacesStr string `json:"-"`
|
||||
MidUnitPrice int `json:"midUnitPrice"`
|
||||
}
|
||||
|
||||
@@ -56,7 +56,8 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
ExdStoreName = "饿鲜达"
|
||||
ExdStoreName = "饿鲜达"
|
||||
MatterStoreID = 666666
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -278,7 +279,8 @@ type Store struct {
|
||||
Status int `json:"status"`
|
||||
AutoEnableAt *time.Time `orm:"type(datetime);null" json:"autoEnableAt"` // 自动营业时间(临时休息用)
|
||||
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"` // 订单评价自动回复类型
|
||||
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"` // 假开店开始
|
||||
FakeOpenStop int16 `orm:"default(0)" json:"fakeOpenStop"` // 假开店结束
|
||||
JdStoreLevel string `orm:"size(32)" json:"jdStoreLevel"` //京东门店等级
|
||||
|
||||
IsOrder int `orm:"default(0)" json:"isOrder"` //是否是下预订单门店
|
||||
}
|
||||
|
||||
func (*StoreMap) TableUnique() [][]string {
|
||||
|
||||
@@ -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 {
|
||||
ModelIDCULD // DeletedAt用于表示请求操作结束,而并不一定是删除
|
||||
|
||||
|
||||
@@ -480,6 +480,7 @@ func (c *PurchaseHandler) SyncQualify(ctx *jxcontext.Context, storeDetail *dao.S
|
||||
}
|
||||
globals.SugarLogger.Debug(utils.Format4Output(qualifyList, false))
|
||||
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.SaveQualifyActionTypeSave, qualifyList)
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
185
business/partner/purchase/jx/localjx/tonglianpay.go
Normal file
185
business/partner/purchase/jx/localjx/tonglianpay.go
Normal 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
|
||||
}
|
||||
@@ -117,6 +117,9 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
|
||||
if storeDetail.VendorStoreName != "" {
|
||||
name = storeDetail.VendorStoreName
|
||||
}
|
||||
// else {
|
||||
// name = jxutils.ComposeStoreName(storeDetail.Store.Name, model.VendorIDMTWM)
|
||||
// }
|
||||
}
|
||||
// openLevel, isOnline := bizStatusJX2Mtwm(mergedStoreStatus)
|
||||
params := map[string]interface{}{
|
||||
|
||||
@@ -40,7 +40,7 @@ func updateFoodRecipeItemAndStep(ctx *jxcontext.Context, db *dao.DaoDB, recipeID
|
||||
if len(v.SkuIDs) == 0 {
|
||||
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 {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ dadaAppSecret = "7f97d8f258b70b450f04e7ab274ed8f8"
|
||||
mtwmAppID = "589"
|
||||
mtwmSecret = "a81eb3df418d83d6a1a4b7c572156d2f"
|
||||
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"
|
||||
|
||||
@@ -56,20 +56,25 @@ wxpayAppKey = "XKJPOIHJ233adf01KJIXlIeQDSDKFJAD"
|
||||
wxpayAppMchID = "1390686702"
|
||||
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"
|
||||
wxBackstageHost = "http://wx.jxc4.com"
|
||||
|
||||
jdStorePageCookie = "YYJV3NHVBPHLD36FWP6F3EM5PTXJ2XZQS7U4HWRIDPP4IWGUKUIB4XG5N26CZRDLDF7PKOXBPD6BNTUAJLETLZOIWMCVFI3K6MYZIY4QBIXIMXYDJNUKFGJVQTN5356SAD6WPCIHWNQAG7DDMF7L7S3SHD6O37OTAHUCKU6ALXATYTGMHNFLM4XRLVSFUQAJR77M4URSZRKVO55243TDVXLO25PP4UYSPTTPMNRUFXDNP4WPE566Q6V4AH32F7HT"
|
||||
jd2StorePageCookie = "CK5GE5MR2UIOBOZC7BBZLLSI7MVDWPEQ4BRJTJQ2OP3ZFKYDDYTFFV4XOXKLERC2UXFT44TMCUMRFP3C25HD6W3PYONTQCOML6YIZA5Z37P62UXFE655IRGYJ4ZLQIEBYQM32FABIN5RVJYZWPQWSRTZURNRLYV57XJEDWZT5UVZRYUBTN3AT6JJJJ22YHE6ZHCN6LCH27JHSRO55YA6TJH6G54IF72X3UAXCKW5P2G2MT3U6I3527NQFMAFLHXBZKQFFMYUKUHUU4GZWD4O7GO45Y"
|
||||
# jdStorePageCookie = "YYJV3NHVBPHLD36FWP6F3EM5PTXJ2XZQS7U4HWRIDPP4IWGUKUIB4XG5N26CZRDLDF7PKOXBPD6BNTUAJLETLZOIWMCVFI3K6MYZIY4QBIXIMXYDJNUKFGJVQTN5356SAD6WPCIHWNQAG7DDMF7L7S3SHD6O37OTAHUCKU6ALXATYTGMHNFLM4XRLVSFUQAJR77M4URSZRKVO55243TDVXLO25PP4UYSPTTPMNRUFXDNP4WPE566Q6V4AH32F7HT"
|
||||
# jd2StorePageCookie = "CK5GE5MR2UIOBOZC7BBZLLSI7MVDWPEQ4BRJTJQ2OP3ZFKYDDYTFFV4XOXKLERC2UXFT44TMCUMRFP3C25HD6W3PYONTQCOML6YIZA5Z37P62UXFE655IRGYJ4ZLQIEBYQM32FABIN5RVJYZWPQWSRTZURNRLYV57XJEDWZT5UVZRYUBTN3AT6JJJJ22YHE6ZHCN6LCH27JHSRO55YA6TJH6G54IF72X3UAXCKW5P2G2MT3U6I3527NQFMAFLHXBZKQFFMYUKUHUU4GZWD4O7GO45Y"
|
||||
fakeJdToken = "ndslkv9asl@djf_n7askdjfk$"
|
||||
fakeJdBaseURL = "http://test.jxc4.com/qqqq"
|
||||
|
||||
ebaiStorePageCookieWMUSS = "B0AAFQCAAAGbhkuMCsvcyYBDkkyAxBGIBlgXAQYVwc7VwYZFkx2HDoPSmo5eV1femopWgJRawhgAALG04cg1RUmhUakBbJRdgPS0tNEhnQhNRewwuWwYYBDEFPCQSDXV5YWA6PAVRHUJ9SnVGMThYAjNjLw9pRxIbS04-XFo05AQgBl%7ERLA33vWcR73gEAKZ"
|
||||
ebaiStorePageCookieWMSTOKEN = "gAALgNAAAGfBI5YEBHSQdZY1InIS8CVQU9aBU1f3VLWVQqKHAAAc5LnRLZ1QLLx0S5IuzCSX8ZQ7oUwAAUr-GEm9JpRc9AQAAsLkLHHXzuhh2lZkbyrcAAAWBESKg3ZA"
|
||||
ebaiStorePageCookieWMUSS2 = "A8AAIcCAAADJhpNHQoGGjZaLFRBdnE7Uwp9TBQXH1o9RTBgP30NQiQmEEAwFVplbwc6wAAMXwsa082aRxJfzskPX9THj9RKgJ0TxE1fyYPZRYVH0YSSjFgARt8Shs3bVc3QHV2Eh94B24KO20vSlJEXnELcDxTl9sJ35T2Dvg21A3wCT0NMXaNAcPzKhPamv"
|
||||
ebaiStorePageCookieWMSTOKEN2 = "A4AANwHAAARMA9ZWhh6BzcGYTQZJjVOHGIxPUdPVElXQz8iahGqiIS5gAAsLaD8yOwpYLCVMU2qqCEN8nAyiUQAAUr-GEu-F2xVbAQAAYcnZGrUx2Rf9qJkbRKQAAONp"
|
||||
ebaiStorePageCookieExdTOKEN = "PBE_2.0_5cd1c6141c127d419e817e88920aa5ae01c164ed47b678e0b16c628ef65ffc0b93ddf4a7cd1f7172e644f4f5321c5f197dd406a5a0d219aae2fa169e59c5419db8f4d4ca44c01e112c6bb4f8d87cbae90e6eaefceba88f486f26bafa41f3ec181773c4b329a6c7c154333a8496509943c63a96c71c72edc82f6beb6ecd9acd5ad69b2f2bbcbe011d05536112cbe52be0b2176860870ce608a0d7f465a1e782f6584e4253aaaee30d9042f82f12b312b5a29151e2e0400f4a128ee365966025f9719278850f60e10ddda0e32554c6867091321cd552b41aa5e5e676f64af218a0e98e4030f499c31de664a0c0a23c5306075ffb061c7654d4646317c8e6a55c66361c96b9e8f11f55c2f666a0240a3f8fb8e221d58b907731a8720572a03febd20d146cad4b6a3821cfd3c5b3286bb3383c4eff8c8ff2d63b8773bbd88f2d6c4b1deb7634221b0e086b7b7d6201435dacdb09525dc59588beeffcd0232ef64aa73fd2325509fa7fc6"
|
||||
mtpsStoreToken = "M0p9VatZSeSHfrosD5IViAVl73IcA8mlcuHIV5sG6Zpv83a7JE0wY3t26aEhrrs_MR5gtLSFF1UIkt8HAjaXow"
|
||||
# ebaiStorePageCookieWMUSS = "B0AAFQCAAAGbhkuMCsvcyYBDkkyAxBGIBlgXAQYVwc7VwYZFkx2HDoPSmo5eV1femopWgJRawhgAALG04cg1RUmhUakBbJRdgPS0tNEhnQhNRewwuWwYYBDEFPCQSDXV5YWA6PAVRHUJ9SnVGMThYAjNjLw9pRxIbS04-XFo05AQgBl%7ERLA33vWcR73gEAKZ"
|
||||
# ebaiStorePageCookieWMSTOKEN = "gAALgNAAAGfBI5YEBHSQdZY1InIS8CVQU9aBU1f3VLWVQqKHAAAc5LnRLZ1QLLx0S5IuzCSX8ZQ7oUwAAUr-GEm9JpRc9AQAAsLkLHHXzuhh2lZkbyrcAAAWBESKg3ZA"
|
||||
# ebaiStorePageCookieWMUSS2 = "A8AAIcCAAADJhpNHQoGGjZaLFRBdnE7Uwp9TBQXH1o9RTBgP30NQiQmEEAwFVplbwc6wAAMXwsa082aRxJfzskPX9THj9RKgJ0TxE1fyYPZRYVH0YSSjFgARt8Shs3bVc3QHV2Eh94B24KO20vSlJEXnELcDxTl9sJ35T2Dvg21A3wCT0NMXaNAcPzKhPamv"
|
||||
# ebaiStorePageCookieWMSTOKEN2 = "A4AANwHAAARMA9ZWhh6BzcGYTQZJjVOHGIxPUdPVElXQz8iahGqiIS5gAAsLaD8yOwpYLCVMU2qqCEN8nAyiUQAAUr-GEu-F2xVbAQAAYcnZGrUx2Rf9qJkbRKQAAONp"
|
||||
# ebaiStorePageCookieExdTOKEN = "PBE_2.0_5cd1c6141c127d41d12be02a04e58e0a2529c8ac5aad36be932f6e341f8be9a0e56b833c924cc95dd2ced76b31ea6fcbc7341cc9c03e3e2f470441192d51fc8bd81b6c5d24a867630a65400e688ff8f4453895ca9a18d7e91726941b28631cf2ab81797279967fcb03ae57e5bc33bf91e4495727569681c724597fb2c639a85c145723c12de262224e2536ad2c6f94bcae0c10c8f30728a6ea3ab6000940fffaa66271f17ecbae139f0b4fdfff791b7986a88b8f252827e799a2e1862ec522fd4c51c70ae9d17c69da93f1c12715bf9e0b35eccf39ae605d424c83319acaa7acbe191a8ee410afd1d02d1e02834ce6cbd2503b89f30efc1f7635a1e71e10e3370fc79b33e6352290e87f82b1cb8ac91195a09ff28e4418923e89993eb10d01e39fb621d517a14081611b25e83da9ec860fbacd2cb13562271585b53a0a7178e8f614bd62ffa442c78a10f008b3721675cad803024fad0c13aeecd64d1360bab4127883d2e7198201"
|
||||
# mtpsStoreToken = "M0p9VatZSeSHfrosD5IViAVl73IcA8mlcuHIV5sG6Zpv83a7JE0wY3t26aEhrrs_MR5gtLSFF1UIkt8HAjaXow"
|
||||
|
||||
weimobAppID = "319F5E7FB6784DFCA3684C9333EB7744"
|
||||
weimobAppSecret = "7267AA7F58261F6965599218F5A1D592"
|
||||
@@ -165,6 +170,10 @@ jd2Token = "29e0e567-c475-433a-aff0-37176ee8d8a7"
|
||||
jd2AppKey = "7fb947624ff847ae94ff2f068cc99652"
|
||||
jd2Secret = "1097abd7ef09427099b4922784af123a"
|
||||
|
||||
jdEclpAccessToken = "bcb6201b5b3c45a0976dcda5e2dea8aejiwm"
|
||||
jdEclpAppKey = "0D397F05CF11C51BCDCC81744680EBC3"
|
||||
jdEclpAppSecret = "f16a5e57ff4f4f428b702c40d2d4b933"
|
||||
|
||||
elmIsProd = true
|
||||
elmToken = ""
|
||||
elmAppKey = "KLRDcOZGrk"
|
||||
@@ -187,6 +196,11 @@ weixinMiniSecret2 = "2a57228a716ce991a52739f0ff41111d"
|
||||
|
||||
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"
|
||||
|
||||
enableStoreWrite = true
|
||||
@@ -204,6 +218,9 @@ dingdingSecret = "LWrZAFeqUfuVv7n_tc8vPpCAx6PT4CwManx2XCVhJOqGsx2L5XCDuX1sAN_Jtv
|
||||
|
||||
dingdingCallbackURL = "http://callback.jxc4.com/dingding/msg"
|
||||
|
||||
yinbaoAppID = "18C0E0867E467DBC26EFF5E957B02EC4"
|
||||
yinbaoAppKey = "682628966212343269"
|
||||
|
||||
[jxgy]
|
||||
httpport = 8088
|
||||
EnableDocs = false
|
||||
@@ -244,8 +261,16 @@ weixinSecret = "6bbbed1443cc062c20a015a64c07a531"
|
||||
weixinMiniAppID = "wx2d6949f724b2541d"
|
||||
weixinMiniSecret = "11f3c380551c4683c149990b004d6df9"
|
||||
|
||||
weixinMiniAppID2 = "wx4b5930c13f8b1170"
|
||||
weixinMiniSecret2 = "2a57228a716ce991a52739f0ff41111d"
|
||||
|
||||
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"
|
||||
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"
|
||||
getYLYTokenURL = "http://www.jxc4.com/v2/sys/GetYLYToken"
|
||||
|
||||
jdEclpAccessToken = "bcb6201b5b3c45a0976dcda5e2dea8aejiwm"
|
||||
jdEclpAppKey = "0D397F05CF11C51BCDCC81744680EBC3"
|
||||
jdEclpAppSecret = "f16a5e57ff4f4f428b702c40d2d4b933"
|
||||
|
||||
yinbaoAppID = "18C0E0867E467DBC26EFF5E957B02EC4"
|
||||
yinbaoAppKey = "682628966212343269"
|
||||
|
||||
storeName = "京西果园"
|
||||
|
||||
[test]
|
||||
@@ -316,6 +348,9 @@ dadaSourceID = "73753"
|
||||
weixinAppID = "wx2bb99eb5d2c9b82c"
|
||||
weixinSecret = "6bbbed1443cc062c20a015a64c07a531"
|
||||
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"
|
||||
|
||||
@@ -345,6 +380,10 @@ jd2Token = "29e0e567-c475-433a-aff0-37176ee8d8a7"
|
||||
jd2AppKey = "7fb947624ff847ae94ff2f068cc99652"
|
||||
jd2Secret = "1097abd7ef09427099b4922784af123a"
|
||||
|
||||
jdEclpAccessToken = "bcb6201b5b3c45a0976dcda5e2dea8aejiwm"
|
||||
jdEclpAppKey = "0D397F05CF11C51BCDCC81744680EBC3"
|
||||
jdEclpAppSecret = "f16a5e57ff4f4f428b702c40d2d4b933"
|
||||
|
||||
elmIsProd = true
|
||||
elmToken = ""
|
||||
elmAppKey = "KLRDcOZGrk"
|
||||
@@ -367,6 +406,10 @@ weixinMiniSecret2 = "2a57228a716ce991a52739f0ff41111d"
|
||||
|
||||
disableWeimob = false
|
||||
getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken"
|
||||
getWeixin2TokenURL = "http://www.jxc4.com/v2/sys/GetWX2Token"
|
||||
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"
|
||||
|
||||
yinbaoAppID = "18C0E0867E467DBC26EFF5E957B02EC4"
|
||||
yinbaoAppKey = "682628966212343269"
|
||||
@@ -647,3 +647,20 @@ func (c *StoreController) SyncJdStore() {
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
@@ -85,6 +85,7 @@ func (c *StoreSkuController) GetStoreSkus() {
|
||||
// @Param ebaiSyncStatus query int false "饿百同步标识"
|
||||
// @Param mtwmSyncStatus query int false "美团外卖同步标识"
|
||||
// @Param lockTime query string false "价格锁定时间"
|
||||
// @Param isHighPrice query bool false "是否查过高价格商品"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /GetStoresSkus [get,post]
|
||||
@@ -92,7 +93,7 @@ func (c *StoreSkuController) GetStoresSkus() {
|
||||
c.callGetStoresSkus(func(params *tStoreSkuGetStoresSkusParams) (retVal interface{}, errCode string, err error) {
|
||||
var storeIDs, skuIDs []int
|
||||
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
|
||||
})
|
||||
@@ -674,6 +675,7 @@ func (c *StoreSkuController) SendSeckillSkusCountMsg() {
|
||||
// @Param token header string true "认证token"
|
||||
// @Param payload formData string true "json数据,JdStoreSkus对象"
|
||||
// @Param vendorID formData int true "厂商ID"
|
||||
// @Param ignoreLow formData bool true "是否忽略低价商品"
|
||||
// @Param isAsync formData bool true "是否异步,缺省是同步"
|
||||
// @Param isContinueWhenError formData bool true "单个同步失败是否继续,缺省false"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
@@ -685,7 +687,76 @@ func (c *StoreSkuController) RefreshJxPriceByVendor() {
|
||||
if err = jxutils.Strings2Objs(params.Payload, &skuBindInfos); err != nil {
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
@@ -485,3 +485,17 @@ func (c *User2Controller) DeleteUserInfo() {
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
22
controllers/eclp_callback.go
Normal file
22
controllers/eclp_callback.go
Normal 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")
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,13 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jxstore/event"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
"github.com/astaxie/beego"
|
||||
)
|
||||
|
||||
@@ -55,3 +60,25 @@ func (c *EventController) GetCheckVendorCookie() {
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1002,3 +1002,17 @@ func (c *OrderController) GetOrdersAccept() {
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ type JxOrderController struct {
|
||||
// @Param token header string true "认证token"
|
||||
// @Param jxOrder formData string true "订单信息"
|
||||
// @Param addressID formData int64 true "配送地址ID"
|
||||
// @Param fromStoreID formData int fasle "物料配送门店"
|
||||
// @Param createType formData int false "创建类型, 0:预创建, 1:创建"
|
||||
// @Success 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) {
|
||||
var jxOrder *localjx.JxOrderInfo
|
||||
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
|
||||
})
|
||||
@@ -61,8 +62,8 @@ func (c *JxOrderController) BuyerCancelOrder() {
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 查询网络打印机状态
|
||||
// @Description 查询网络打印机状态
|
||||
// @Title 得到门店营业时间配送列表
|
||||
// @Description 得到门店营业时间配送列表
|
||||
// @Param token header string true "认证token"
|
||||
// @Param storeID query int true "门店ID"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
@@ -159,3 +160,44 @@ func (c *JxOrderController) PayForPopluarMan() {
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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
|
||||
// @Description 得到易联云token
|
||||
// @Param accessKey query string true "假token"
|
||||
|
||||
39
controllers/tonglian_callback.go
Normal file
39
controllers/tonglian_callback.go
Normal 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
|
||||
}
|
||||
@@ -3,6 +3,11 @@ package api
|
||||
import (
|
||||
"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"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi"
|
||||
@@ -38,6 +43,7 @@ var (
|
||||
|
||||
Jd2API *jdapi.API
|
||||
FakeJdAPI *jdapi.API
|
||||
JdEclpAPI *jdeclpapi.API
|
||||
|
||||
ElmAPI *elmapi.API
|
||||
EbaiAPI *ebaiapi.API
|
||||
@@ -50,7 +56,10 @@ var (
|
||||
WeixinMiniAPI *weixinapi.API // 小程序
|
||||
WeixinMiniAPI2 *weixinapi.API // 小程序2
|
||||
WeixinMiniAppID2 string
|
||||
WxpayAPI *wxpayapi.API // 微信支付API
|
||||
WxpayAPI *wxpayapi.API // 微信支付API
|
||||
TLpayAPI *tonglianpayapi.API //通联收银宝api
|
||||
|
||||
YinBaoAPI *yinbaoapi.API //银豹平台api
|
||||
|
||||
WeixinPageAPI *weixinapi.API // 用户微信扫码登录
|
||||
|
||||
@@ -82,16 +91,16 @@ func init() {
|
||||
func Init() {
|
||||
if !beego.AppConfig.DefaultBool("disableJd", false) {
|
||||
JdAPI = jdapi.New(beego.AppConfig.String("jdToken"), beego.AppConfig.String("jdAppKey"), beego.AppConfig.String("jdSecret"))
|
||||
cookieValue := beego.AppConfig.DefaultString("jdStorePageCookie", "")
|
||||
JdAPI.SetJdCookie(cookieValue)
|
||||
// cookieValue := beego.AppConfig.DefaultString("jdStorePageCookie", "")
|
||||
// JdAPI.SetJdCookie(cookieValue)
|
||||
|
||||
conf := platformapi.NewDefAPIConfig()
|
||||
conf.MaxSleepSecondWhenExceedLimit = 60 * 30 // 最大重试间隙30分钟
|
||||
JdPageAPI = jdapi.NewPageOnly(cookieValue, conf)
|
||||
JdPageAPI = jdapi.NewPageOnly("", conf)
|
||||
|
||||
if globals.Jd2OrgCode != "" {
|
||||
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", "")
|
||||
@@ -101,6 +110,11 @@ func Init() {
|
||||
} else {
|
||||
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) {
|
||||
ElmAPI = elmapi.New(beego.AppConfig.DefaultString("elmToken", ""), beego.AppConfig.String("elmAppKey"), beego.AppConfig.String("elmSecret"), beego.AppConfig.DefaultBool("elmIsProd", false))
|
||||
} else {
|
||||
@@ -108,9 +122,9 @@ func Init() {
|
||||
}
|
||||
if !beego.AppConfig.DefaultBool("disableMtwm", false) {
|
||||
MtwmAPI = mtwmapi.New(beego.AppConfig.String("mtwmAppID"), beego.AppConfig.String("mtwmSecret"), beego.AppConfig.String("mtwmCallbackURL"))
|
||||
if mtwmCookieStr := beego.AppConfig.DefaultString("mtwmCookieStr", ""); mtwmCookieStr != "" {
|
||||
MtwmAPI.SetCookieWithStr(mtwmCookieStr)
|
||||
}
|
||||
// if mtwmCookieStr := beego.AppConfig.DefaultString("mtwmCookieStr", ""); mtwmCookieStr != "" {
|
||||
// MtwmAPI.SetCookieWithStr(mtwmCookieStr)
|
||||
// }
|
||||
} else {
|
||||
MtwmAPI = nil
|
||||
}
|
||||
@@ -124,32 +138,38 @@ func Init() {
|
||||
}
|
||||
if !beego.AppConfig.DefaultBool("disableEbai", false) {
|
||||
EbaiAPI = ebaiapi.New(beego.AppConfig.String("ebaiSource"), beego.AppConfig.String("ebaiSecret"))
|
||||
ebaiStorePageCookieWMUSS := beego.AppConfig.DefaultString("ebaiStorePageCookieWMUSS", "")
|
||||
ebaiStorePageCookieWMSTOKEN := beego.AppConfig.DefaultString("ebaiStorePageCookieWMSTOKEN", "")
|
||||
ebaiStorePageCookieExdTOKEN := beego.AppConfig.DefaultString("ebaiStorePageCookieExdTOKEN", "")
|
||||
if ebaiStorePageCookieWMUSS != "" && ebaiStorePageCookieWMSTOKEN != "" && ebaiStorePageCookieExdTOKEN != "" {
|
||||
EbaiAPI.SetCookie("WMUSS", ebaiStorePageCookieWMUSS)
|
||||
EbaiAPI.SetCookie("WMSTOKEN", ebaiStorePageCookieWMSTOKEN)
|
||||
EbaiAPI.SetCookie("PASSPORT_DELIMONT_TOKEN", ebaiStorePageCookieExdTOKEN)
|
||||
}
|
||||
// ebaiStorePageCookieWMUSS := beego.AppConfig.DefaultString("ebaiStorePageCookieWMUSS", "")
|
||||
// ebaiStorePageCookieWMSTOKEN := beego.AppConfig.DefaultString("ebaiStorePageCookieWMSTOKEN", "")
|
||||
// ebaiStorePageCookieExdTOKEN := beego.AppConfig.DefaultString("ebaiStorePageCookieExdTOKEN", "")
|
||||
// if ebaiStorePageCookieWMUSS != "" && ebaiStorePageCookieWMSTOKEN != "" && ebaiStorePageCookieExdTOKEN != "" {
|
||||
// EbaiAPI.SetCookie("WMUSS", ebaiStorePageCookieWMUSS)
|
||||
// EbaiAPI.SetCookie("WMSTOKEN", ebaiStorePageCookieWMSTOKEN)
|
||||
// EbaiAPI.SetCookie("PASSPORT_DELIMONT_TOKEN", ebaiStorePageCookieExdTOKEN)
|
||||
// }
|
||||
Ebai2API = ebaiapi.New(beego.AppConfig.String("ebaiSource"), beego.AppConfig.String("ebaiSecret"))
|
||||
ebaiStorePageCookieWMUSS2 := beego.AppConfig.DefaultString("ebaiStorePageCookieWMUSS2", "")
|
||||
ebaiStorePageCookieWMSTOKEN2 := beego.AppConfig.DefaultString("ebaiStorePageCookieWMSTOKEN2", "")
|
||||
if ebaiStorePageCookieWMUSS2 != "" && ebaiStorePageCookieWMSTOKEN2 != "" && ebaiStorePageCookieExdTOKEN != "" {
|
||||
Ebai2API.SetCookie("WMUSS", ebaiStorePageCookieWMUSS2)
|
||||
Ebai2API.SetCookie("WMSTOKEN", ebaiStorePageCookieWMSTOKEN2)
|
||||
Ebai2API.SetCookie("PASSPORT_DELIMONT_TOKEN", ebaiStorePageCookieExdTOKEN)
|
||||
}
|
||||
// ebaiStorePageCookieWMUSS2 := beego.AppConfig.DefaultString("ebaiStorePageCookieWMUSS2", "")
|
||||
// ebaiStorePageCookieWMSTOKEN2 := beego.AppConfig.DefaultString("ebaiStorePageCookieWMSTOKEN2", "")
|
||||
// if ebaiStorePageCookieWMUSS2 != "" && ebaiStorePageCookieWMSTOKEN2 != "" && ebaiStorePageCookieExdTOKEN != "" {
|
||||
// Ebai2API.SetCookie("WMUSS", ebaiStorePageCookieWMUSS2)
|
||||
// Ebai2API.SetCookie("WMSTOKEN", ebaiStorePageCookieWMSTOKEN2)
|
||||
// Ebai2API.SetCookie("PASSPORT_DELIMONT_TOKEN", ebaiStorePageCookieExdTOKEN)
|
||||
// }
|
||||
} else {
|
||||
EbaiAPI = 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) {
|
||||
MtpsAPI = mtpsapi.New(beego.AppConfig.String("mtpsAppKey"), beego.AppConfig.String("mtpsSecret"))
|
||||
if mtpsStoreToken := beego.AppConfig.DefaultString("mtpsStoreToken", ""); mtpsStoreToken != "" {
|
||||
MtpsAPI.SetCookie("token", mtpsStoreToken)
|
||||
}
|
||||
// if mtpsStoreToken := beego.AppConfig.DefaultString("mtpsStoreToken", ""); mtpsStoreToken != "" {
|
||||
// MtpsAPI.SetCookie("token", mtpsStoreToken)
|
||||
// }
|
||||
} else {
|
||||
MtpsAPI = nil
|
||||
}
|
||||
@@ -181,6 +201,10 @@ func Init() {
|
||||
WxpayAPI = wxpayapi.NewWithCertificate(beego.AppConfig.String("wxpayAppID"), beego.AppConfig.String("wxpayAppKey"), beego.AppConfig.String("wxpayAppMchID"),
|
||||
"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"))
|
||||
BaiDuNaviAPI = baidunavi.New(beego.AppConfig.String("baidunaviAK"), beego.AppConfig.String("baidunaviSK"))
|
||||
QiniuAPI = qbox.NewMac(beego.AppConfig.String("qiniuAK"), beego.AppConfig.String("qiniuSK"))
|
||||
|
||||
@@ -31,6 +31,7 @@ func Init() {
|
||||
orm.RegisterModel(&model.Place{})
|
||||
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.StoreSkuBindHistory{})
|
||||
orm.RegisterModel(&model.SkuCategory{})
|
||||
orm.RegisterModel(&model.ThingMap{})
|
||||
|
||||
|
||||
@@ -32,10 +32,11 @@ var (
|
||||
BackstageHost string
|
||||
WxBackstageHost string
|
||||
|
||||
GetWeixinTokenURL string
|
||||
GetWeixinTokenKey string
|
||||
GetYLYTokenURL string
|
||||
GetWeimobTokenURL string
|
||||
GetWeixinTokenURL string
|
||||
GetWeixin2TokenURL string
|
||||
GetWeixinTokenKey string
|
||||
GetYLYTokenURL string
|
||||
GetWeimobTokenURL string
|
||||
|
||||
StoreName string
|
||||
StoreNameMtwm string
|
||||
@@ -50,6 +51,7 @@ var (
|
||||
DisableWXAuth1 bool
|
||||
|
||||
WxpayNotifyURL string
|
||||
TLPayNotifyURL string
|
||||
|
||||
JdOrgCode string
|
||||
Jd2OrgCode string
|
||||
@@ -99,6 +101,7 @@ func Init() {
|
||||
WxBackstageHost = beego.AppConfig.DefaultString("wxBackstageHost", "")
|
||||
|
||||
GetWeixinTokenURL = beego.AppConfig.DefaultString("getWeixinTokenURL", "")
|
||||
GetWeixin2TokenURL = beego.AppConfig.DefaultString("getWeixin2TokenURL", "")
|
||||
GetYLYTokenURL = beego.AppConfig.DefaultString("getYLYTokenURL", "")
|
||||
GetWeimobTokenURL = beego.AppConfig.DefaultString("getWeimobTokenURL", "")
|
||||
GetWeixinTokenKey = beego.AppConfig.DefaultString("getWeixinTokenKey", "")
|
||||
@@ -116,6 +119,7 @@ func Init() {
|
||||
DisableWXAuth1 = true
|
||||
|
||||
WxpayNotifyURL = beego.AppConfig.DefaultString("wxpayNotifyURL", "")
|
||||
TLPayNotifyURL = beego.AppConfig.DefaultString("tonglianPayNotifyURL", "")
|
||||
JdOrgCode = beego.AppConfig.DefaultString("jdOrgCode", "")
|
||||
Jd2OrgCode = beego.AppConfig.DefaultString("jd2OrgCode", "")
|
||||
|
||||
|
||||
8
main.go
8
main.go
@@ -126,10 +126,14 @@ func main() {
|
||||
globals.SugarLogger.Errorf("RefreshWeixinToken failed with error:%s", err)
|
||||
return
|
||||
}
|
||||
if err := tasks.RefreshWeimobToken(); err != nil {
|
||||
globals.SugarLogger.Errorf("RefreshWeimobToken failed with error:%s", err)
|
||||
if err := tasks.RefreshWeixin2Token(); err != nil {
|
||||
globals.SugarLogger.Errorf("RefreshWeixin2Token failed with error:%s", err)
|
||||
return
|
||||
}
|
||||
// if err := tasks.RefreshWeimobToken(); err != nil {
|
||||
// globals.SugarLogger.Errorf("RefreshWeimobToken failed with error:%s", err)
|
||||
// return
|
||||
// }
|
||||
if err := tasks.RefreshYilianyunToken(); err != nil {
|
||||
globals.SugarLogger.Errorf("RefreshYilianyunToken failed with error:%s", err)
|
||||
return
|
||||
|
||||
@@ -421,6 +421,15 @@ func init() {
|
||||
Filters: 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.ControllerComments{
|
||||
Method: "GetOrdersFinancial",
|
||||
@@ -646,6 +655,15 @@ func init() {
|
||||
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: "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.ControllerComments{
|
||||
Method: "GetMyOrderCountInfo",
|
||||
@@ -691,6 +709,24 @@ func init() {
|
||||
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: "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.ControllerComments{
|
||||
Method: "JxMsg",
|
||||
@@ -954,6 +990,15 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||
beego.ControllerComments{
|
||||
Method: "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.ControllerComments{
|
||||
Method: "GetOrderInfo",
|
||||
@@ -1485,6 +1530,15 @@ func init() {
|
||||
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.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.ControllerComments{
|
||||
Method: "DeleteStore",
|
||||
@@ -1755,6 +1809,15 @@ func init() {
|
||||
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: "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.ControllerComments{
|
||||
Method: "CopyStoreSkus",
|
||||
@@ -1908,6 +1971,24 @@ func init() {
|
||||
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: "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.ControllerComments{
|
||||
Method: "RefreshStoresSkuByVendor",
|
||||
@@ -1917,6 +1998,15 @@ func init() {
|
||||
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: "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.ControllerComments{
|
||||
Method: "SendSeckillSkusCountMsg",
|
||||
@@ -2124,6 +2214,15 @@ func init() {
|
||||
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.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.ControllerComments{
|
||||
Method: "GetWXToken",
|
||||
@@ -2358,6 +2457,15 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"],
|
||||
beego.ControllerComments{
|
||||
Method: "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.ControllerComments{
|
||||
Method: "GetMyStoreList",
|
||||
|
||||
@@ -155,6 +155,8 @@ func init() {
|
||||
beego.AutoRouter(&controllers.DingDingController{})
|
||||
beego.AutoRouter(&controllers.WXPayController{})
|
||||
beego.AutoRouter(&controllers.Djsw2Controller{})
|
||||
beego.AutoRouter(&controllers.TongLianController{})
|
||||
beego.AutoRouter(&controllers.EclpController{})
|
||||
|
||||
// 如下都是用于检测存活的空接口
|
||||
beego.Any("/", func(ctx *beecontext.Context) {
|
||||
|
||||
Reference in New Issue
Block a user