Merge remote-tracking branch 'origin/jdshop' into jxact

This commit is contained in:
苏尹岚
2020-08-18 08:49:00 +08:00
19 changed files with 262 additions and 94 deletions

View File

@@ -275,9 +275,9 @@ func LoginInternal(ctx *Context, authType, authID, authIDType, authSecret string
userProvider.UpdateLastLogin(user.GetID(), authType, ctx.GetRealRemoteIP())
}
//如果是小程序
if authType == "weixinmini" {
if authType == "weixinmini" || authType == "weixinapp" {
appID := strings.Split(authSecret, ",")[0]
if appID == "wx08a5c2a8581414ff" || appID == "wx2d6949f724b2541d" { //菜市或者果园
if appID == "wx08a5c2a8581414ff" || appID == "wx2d6949f724b2541d" || appID == "wx18111a41fd17f24f" { //菜市或者果园
if user != nil {
binds, err := dao.GetUserBindAuthInfo(dao.GetDB(), user.GetID(), 0, nil, "", "", "wx2bb99eb5d2c9b82c")
if err != nil {

View File

@@ -15,6 +15,7 @@ const (
AuthTypeWeixin = "wxqrcode" // 微信扫码
AuthTypeMP = "weixinsns" // 公众号
AuthTypeWXNative = "wxnative" // 微信APP
AuthTypeWxApp = "weixinapp" //app微信登录
)
type Auther struct {
@@ -26,6 +27,7 @@ var (
AutherObjWX *Auther
AutherObjMP *Auther
AutherObjNative *Auther
AutherObjApp *Auther
)
var (
@@ -47,6 +49,11 @@ func init() {
authType: AuthTypeWXNative,
}
auth2.RegisterAuther(AuthTypeWXNative, AutherObjNative)
AutherObjApp = &Auther{
authType: AuthTypeWxApp,
}
auth2.RegisterAuther(AuthTypeWxApp, AutherObjApp)
}
func (a *Auther) VerifySecret(id, secret string) (authBindEx *auth2.AuthBindEx, err error) {
@@ -71,7 +78,7 @@ func (a *Auther) VerifySecret(id, secret string) (authBindEx *auth2.AuthBindEx,
if err == nil {
wxUserinfo, err2 := a.getAPI().SNSGetUserInfo(accessToken, openID)
if err = err2; err == nil {
if authBindEx, err = a.UnionFindAuthBind(a.authType, a.getAPI().GetAppID(), []string{AuthTypeWeixin, AuthTypeMP, AuthTypeMini, AuthTypeWXNative}, wxUserinfo.OpenID, wxUserinfo.UnionID, wxUserinfo); err == nil {
if authBindEx, err = a.UnionFindAuthBind(a.authType, a.getAPI().GetAppID(), []string{AuthTypeWeixin, AuthTypeMP, AuthTypeMini, AuthTypeWXNative, AuthTypeWxApp}, wxUserinfo.OpenID, wxUserinfo.UnionID, wxUserinfo); err == nil {
authBindEx.UserHint = &auth2.UserBasic{
Name: wxUserinfo.NickName,
Avatar: wxUserinfo.HeadImgURL,
@@ -86,6 +93,9 @@ func (a *Auther) getAPI() *weixinapi.API {
if a.authType == AuthTypeWeixin {
return api.WeixinPageAPI
}
if a.authType == AuthTypeWxApp {
return api.WeixinApp
}
return api.WeixinAPI
}

View File

@@ -92,9 +92,6 @@ func getWxApp(appID string) (miniApi *weixinapi.API) {
if len(appID) > 0 && appID == api.WeixinMiniAppID2 {
miniApi = api.WeixinMiniAPI2
}
if len(appID) > 0 && appID == api.WeixinMiniAppID3 {
miniApi = api.WeixinMiniAPI3
}
return miniApi
}

View File

@@ -215,7 +215,7 @@ func (c *OrderManager) OnOrderStatusChanged(vendorOrgCode string, orderStatus *m
// }
// } else {
if order.NewEarningPrice == 0 || order.NewEarningPrice != (order.TotalShopMoney-waybill.DesiredFee)*int64(100-store.PayPercentage/2)/int64(100) {
order.NewEarningPrice = (order.TotalShopMoney - waybill.DesiredFee) * int64(100-store.PayPercentage/2) / int64(100)
order.NewEarningPrice = order.TotalShopMoney*int64(100-store.PayPercentage/2)/int64(100) - waybill.DesiredFee
}
// }
}
@@ -361,12 +361,16 @@ func ModifyOrderSkusStock(db *dao.DaoDB, order *model.GoodsOrder, isAdd bool) (e
for _, sku := range skus {
storeSkus, _ := dao.GetStoresSkusInfo(db, []int{jxutils.GetSaleStoreIDFromOrder(order)}, []int{sku.SkuID})
if len(storeSkus) == 0 {
globals.SugarLogger.Warnf("此订单商品没得storsku%v,%v", order.VendorOrderID, sku.SkuID)
if !isAdd {
globals.SugarLogger.Warnf("此订单商品没得storsku%v,%v", order.VendorOrderID, sku.SkuID)
}
continue
}
storeSku, stock := storeSkus[0], 0
if storeSku.Stock == 0 {
globals.SugarLogger.Warnf("此订单商品库存为0%v,%v", order.VendorOrderID, sku.SkuID)
if !isAdd {
globals.SugarLogger.Warnf("此订单商品库存为0%v,%v", order.VendorOrderID, sku.SkuID)
}
continue
}
if isAdd {
@@ -1486,8 +1490,9 @@ func SendJdwlForJdsOrder(ctx *jxcontext.Context, vendorOrderID string) (err erro
waybill = v
}
}
handler := partner.DeliveryPlatformHandlers[waybill.WaybillVendorID]
err = handler.Handler.CancelWaybill(waybill, 0, "订单已发送其他物流")
if handler := partner.GetDeliveryPlatformFromVendorID(model.VendorIDJDWL); handler != nil {
err = handler.Handler.CancelWaybill(waybill, 0, "订单已发送其他物流")
}
if err != nil {
return err
}
@@ -1543,12 +1548,13 @@ func SendJdwlForJdsOrder(ctx *jxcontext.Context, vendorOrderID string) (err erro
dao.UpdateEntity(db, order, "EclpOutID")
vendorWaybillID = eclpSoNo
} else {
handler := partner.DeliveryPlatformHandlers[model.VendorIDJDWL]
waybill2, err := handler.Handler.CreateWaybill(order, 0)
if err != nil {
return err
if handler := partner.GetDeliveryPlatformFromVendorID(model.VendorIDJDWL); handler != nil {
waybill2, err := handler.Handler.CreateWaybill(order, 0)
if err != nil {
return err
}
vendorWaybillID = waybill2.VendorWaybillID
}
vendorWaybillID = waybill2.VendorWaybillID
}
jdshop.CurPurchaseHandler.OrderExport(ctx, vendorOrderID, vendorWaybillID, false)
return err

View File

@@ -736,8 +736,31 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
// if order.VendorID == model.VendorIDJX {
// excludeVendorIDs = append(excludeVendorIDs, model.VendorIDMTPS)
// }
if _, err = s.CreateWaybillOnProviders4SavedOrder(jxcontext.AdminCtx, savedOrderInfo, nil, excludeVendorIDs, false, maxDeliveryFee); err == nil {
savedOrderInfo.retryCount++
if savedOrderInfo != nil {
//TODO 2020-07-21 发单时间要在门店的营业时间内
if savedOrderInfo.storeDetail != nil {
if savedOrderInfo.storeDetail.OpenTime1 != 0 && savedOrderInfo.storeDetail.CloseTime1 != 0 {
time1 := jxutils.JxOperationTime2TimeByDate(savedOrderInfo.storeDetail.OpenTime1, time.Now())
time2 := jxutils.JxOperationTime2TimeByDate(savedOrderInfo.storeDetail.CloseTime1, time.Now())
if time.Now().Sub(time1) < 0 || time.Now().Sub(time2) > 0 {
if savedOrderInfo.storeDetail.OpenTime2 != 0 && savedOrderInfo.storeDetail.CloseTime2 != 0 {
time3 := jxutils.JxOperationTime2TimeByDate(savedOrderInfo.storeDetail.OpenTime2, time.Now())
time4 := jxutils.JxOperationTime2TimeByDate(savedOrderInfo.storeDetail.CloseTime2, time.Now())
if time.Now().Sub(time3) < 0 || time.Now().Sub(time4) > 0 {
err = fmt.Errorf("不在门店营业时间范围内!")
}
} else {
err = fmt.Errorf("不在门店营业时间范围内!")
}
}
}
}
}
if err == nil {
if _, err = s.CreateWaybillOnProviders4SavedOrder(jxcontext.AdminCtx, savedOrderInfo, nil, excludeVendorIDs, false, maxDeliveryFee); err == nil {
savedOrderInfo.retryCount++
}
}
} else {
errMsg := fmt.Sprintf("订单:%s已经自动创建过了%d次运单仍然无法配送请关注", order.VendorOrderID, savedOrderInfo.retryCount)

View File

@@ -87,28 +87,6 @@ func (s *DefScheduler) canOrderCreateWaybillNormally(order *model.GoodsOrder, sa
} else if model.IsOrderHaveWaybill(order) {
err = fmt.Errorf("当前订单%s已经有了有效的承运人%s了", order.VendorOrderID, jxutils.GetVendorName(order.WaybillVendorID))
}
if savedOrderInfo != nil {
//TODO 2020-07-21 发单时间要在门店的营业时间内
if savedOrderInfo.storeDetail != nil {
if savedOrderInfo.storeDetail.OpenTime1 != 0 && savedOrderInfo.storeDetail.CloseTime1 != 0 {
time1 := jxutils.JxOperationTime2TimeByDate(savedOrderInfo.storeDetail.OpenTime1, time.Now())
time2 := jxutils.JxOperationTime2TimeByDate(savedOrderInfo.storeDetail.CloseTime1, time.Now())
if time.Now().Sub(time1) < 0 || time.Now().Sub(time2) > 0 {
if savedOrderInfo.storeDetail.OpenTime2 != 0 && savedOrderInfo.storeDetail.CloseTime2 != 0 {
time3 := jxutils.JxOperationTime2TimeByDate(savedOrderInfo.storeDetail.OpenTime2, time.Now())
time4 := jxutils.JxOperationTime2TimeByDate(savedOrderInfo.storeDetail.CloseTime2, time.Now())
if time.Now().Sub(time3) < 0 || time.Now().Sub(time4) > 0 {
// globals.SugarLogger.Warnf("createWaybillOn3rdProviders return orderID: %s,不在门店营业时间范围内1", order.VendorOrderID)
err = fmt.Errorf("不在门店营业时间范围内!")
}
} else {
// globals.SugarLogger.Warnf("createWaybillOn3rdProviders return orderID: %s,不在门店营业时间范围内2", order.VendorOrderID)
err = fmt.Errorf("不在门店营业时间范围内!")
}
}
}
}
}
return err
}

View File

@@ -1070,7 +1070,7 @@ func RefreshPageActs(ctx *jxcontext.Context, vendorIDs []int, createdFrom time.T
func DeleteStoresFromAct(ctx *jxcontext.Context, vendorID int, actTypes, storeIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
db := dao.GetDB()
task := tasksch.NewParallelTask("将SKU从所有活动中删除", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx,
task := tasksch.NewParallelTask("将门店从所有活动中删除", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeID := batchItemList[0].(int)
acts, _ := dao.QueryActs(db, 0, 0, 50, 0, "", vendorID, []int{1}, actTypes, nil, storeID, nil, 0, utils.ZeroTimeValue, utils.ZeroTimeValue, time.Now().AddDate(0, -3, 0), time.Now())
@@ -1094,7 +1094,6 @@ func DeleteStoresFromAct(ctx *jxcontext.Context, vendorID int, actTypes, storeID
_, err = SyncAct(ctx, nil, v.ID, nil, true)
}
}
return retVal, err
}, storeIDs)
tasksch.HandleTask(task, nil, true).Run()

View File

@@ -1224,6 +1224,7 @@ func AddStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, vendorID int, vend
if globals.IsAddEvent {
err = AddEventDetail(db, ctx, model.OperateAdd, vendorID, model.ThingTypeStore, storeID, "", `{"VendorID":`+utils.Int2Str(vendorID)+`}`)
}
_, err = CurVendorSync.FullSyncStoresSkus(ctx, db, []int{vendorID}, []int{storeID}, true, nil, true, true)
return outStoreMap, err
}

View File

@@ -1684,7 +1684,8 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID int, toStoreIDs []int, co
t1.status = IF(? = 0, t1.status, t0.status),
t1.jd_sync_status = t1.jd_sync_status | ?,
t1.mtwm_sync_status = t1.mtwm_sync_status | ?,
t1.ebai_sync_status = t1.ebai_sync_status | ?
t1.ebai_sync_status = t1.ebai_sync_status | ?,
t1.stock = t0.stock
WHERE t1.store_id = ? AND t1.deleted_at = ? AND t0.id IS NOT NULL
`
sqlParams := []interface{}{
@@ -1725,13 +1726,13 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID int, toStoreIDs []int, co
// 添加toStore中不存在但fromStore存在的
sql = `
INSERT INTO store_sku_bind(created_at, updated_at, last_operator, deleted_at, store_id, sku_id, sub_store_id, price, jx_price, unit_price, status,
jd_sync_status, ebai_sync_status, mtwm_sync_status)
jd_sync_status, ebai_sync_status, mtwm_sync_status, stock)
SELECT ?, ?, ?, ?, ?,
t1.sku_id, 0,
IF(t1.price * ? / 100 > 0, t1.price * ? / 100, 1) * ?,
IF(t1.jx_price * ? / 100 > 0, t1.jx_price * ? / 100, 1) * ?,
IF(t1.unit_price * ? / 100 > 0, t1.unit_price * ? / 100, 1) * ?,
IF(? = 0, ?, t1.status), ?, ?, ?
IF(? = 0, ?, t1.status), ?, ?, ?, t1.stock
FROM store_sku_bind t1
JOIN sku t2 ON t1.sku_id = t2.id AND t2.deleted_at = ?
JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ?
@@ -3332,7 +3333,7 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBindInf
} else {
payPercentage = store.PayPercentage
}
priceReferList, _ := dao.GetPriceReferSnapshotNoPage(db, []int{store.CityCode}, nil, []int{skuList[0].NameID}, utils.Time2Date(time.Now().AddDate(0, 0, -1)))
priceReferList, _ := dao.GetPriceReferSnapshotNoPage(db, []int{0}, nil, []int{skuList[0].NameID}, utils.Time2Date(time.Now().AddDate(0, 0, -1)))
if len(priceReferList) > 0 {
price = priceReferList[0].MidUnitPrice / payPercentage * 100
}
@@ -4796,3 +4797,103 @@ func StoreSkuPriceAudit(ctx *jxcontext.Context, storeSkuAudits []*model.StoreSku
}
return nil, hint, err
}
func GetSpecialtyStoreSkus(ctx *jxcontext.Context, storeIDs, vendorIDs []int) (err error) {
type SpecialtyStoreSkus struct {
StoreID int `json:"门店ID"`
StoreName string `json:"门店名"`
SkuID int `json:"SkuID"`
SkuName string `json:"商品名"`
Price float64 `json:"平台价"`
VendorName string `json:"平台名"`
}
var (
db = dao.GetDB()
specialtyStoreSkus []*SpecialtyStoreSkus
excelTitle = []string{
"门店ID",
"门店名",
"SkuID",
"商品名",
"平台价",
"平台名",
}
sheetList []*excel.Obj2ExcelSheetConfig
downloadURL, fileName string
)
for _, v := range vendorIDs {
for _, vv := range storeIDs {
storeDetail, err := dao.GetStoreDetail(db, vv, v)
if err != nil || storeDetail == nil {
continue
}
if partner.IsMultiStore(v) {
var (
page = 1
vendorSkuIDs []string
)
_, totalCount, _ := api.JdPageAPI.GetJdTopSkus(storeDetail.VendorStoreID, page)
for ; page < totalCount/10+1; page++ {
result, _, _ := api.JdPageAPI.GetJdTopSkus(storeDetail.VendorStoreID, page)
vendorSkuIDs = append(vendorSkuIDs, result...)
}
for _, vvv := range vendorSkuIDs {
thingMap := &model.ThingMap{}
sql := `
SELECT * FROM thing_map WHERE thing_type = 3 AND vendor_thing_id = ? AND vendor_org_code = 320406
AND deleted_at = ?
`
sqlParams := []interface{}{
vvv, utils.DefaultTimeValue,
}
dao.GetRow(db, &thingMap, sql, sqlParams)
skus, _ := dao.GetSkus(db, []int{int(thingMap.ThingID)}, nil, nil, nil, nil)
specialtyStoreSku := &SpecialtyStoreSkus{
StoreID: vv,
StoreName: storeDetail.Name,
SkuID: int(thingMap.ThingID),
SkuName: skus[0].Name,
Price: 0,
VendorName: model.VendorNames[v],
}
specialtyStoreSkus = append(specialtyStoreSkus, specialtyStoreSku)
}
} else {
handler := partner.GetPurchasePlatformFromVendorID(v).(partner.ISingleStoreStoreSkuHandler)
skuList, _ := handler.GetStoreSkusFullInfo(ctx, nil, vv, storeDetail.VendorStoreID, nil)
for _, sku := range skuList {
if sku.SkuList[0].IsSpecialty == model.YES {
specialtyStoreSku := &SpecialtyStoreSkus{
StoreID: vv,
StoreName: storeDetail.Name,
SkuID: sku.SkuList[0].SkuID,
SkuName: sku.Name,
Price: float64(sku.SkuList[0].VendorPrice) / 100,
VendorName: model.VendorNames[v],
}
specialtyStoreSkus = append(specialtyStoreSkus, specialtyStoreSku)
}
}
}
}
}
excelConf := &excel.Obj2ExcelSheetConfig{
Title: "sheet1",
Data: specialtyStoreSkus,
CaptionList: excelTitle,
}
sheetList = append(sheetList, excelConf)
if excelConf != nil {
downloadURL, fileName, err = jxutils.UploadExeclAndPushMsg(sheetList, "力荐或置顶商品")
} else {
baseapi.SugarLogger.Debug("WriteToExcel: dataSuccess is nil!")
}
if err != nil {
baseapi.SugarLogger.Errorf("WriteToExcel:upload %s , %s failed error:%v", fileName, err)
} else {
noticeMsg := fmt.Sprintf("[详情点我]%s/billshow/?normal=true&path=%s \n", globals.BackstageHost, downloadURL)
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, ctx.GetUserID(), "异步任务完成", noticeMsg)
baseapi.SugarLogger.Debug("WriteToExcel: dataSuccess downloadURL: [%v]", downloadURL)
}
return err
}

View File

@@ -13,7 +13,6 @@ import (
"github.com/360EntSecGroup-Skylar/excelize"
"github.com/qiniu/api.v7/storage"
"git.rosy.net.cn/baseapi/platformapi/dadaapi"
"git.rosy.net.cn/baseapi/platformapi/jdapi"
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
"git.rosy.net.cn/baseapi/utils"
@@ -1585,18 +1584,34 @@ func UploadJdsImage(ctx *jxcontext.Context) (err error) {
// fmt.Println("updateList2", utils.Format4Output(updateList, false))
// fmt.Println("deleteList2", deleteList)
var (
db = dao.GetDB()
db = dao.GetDB()
storeSkus []*model.StoreSkuBind
)
list, err := dao.GetStoreCourierList(db, nil, []int{model.VendorIDDada}, model.StoreStatusAll, model.StoreAuditStatusAll)
for _, v := range list {
sd, _ := api.DadaAPI.ShopDetail(v.VendorStoreID)
if !strings.Contains(sd.StationName, globals.StoreName) {
shopInfo := &dadaapi.ShopInfo{
OriginShopID: v.VendorStoreID,
StationName: globals.StoreName + "-" + sd.StationName,
}
api.DadaAPI.ShopUpdate(shopInfo)
sql := `
SELECT a.* FROM store_sku_bind a,store b
WHERE a.store_id = b.id AND b.deleted_at = '1970-01-01 00:00:00' AND a.unit_price = 100
AND a.deleted_at = '1970-01-01 00:00:00'
AND a.sku_id NOT IN (34268,6045545,29401,6039481,29285,29286,29287,6040945,6040963,31737,33465,6045629,34989,6043733,6039661,25917,29569)
`
err = dao.GetRows(db, &storeSkus, sql, nil)
for _, v := range storeSkus {
var unitPrice = 0
his, _ := dao.GetStoreSkuHistory(db, []int{v.StoreID}, []int{v.SkuID}, model.StoreAuditStatusAll, utils.Time2Date(utils.Str2Time("2020-08-09 00:00:00")))
if len(his) == 0 {
p, _ := dao.GetPriceReferSnapshotNoPage(db, []int{0}, []int{v.SkuID}, nil, utils.Time2Date(time.Now().AddDate(0, 0, -1)))
unitPrice = p[0].MidUnitPrice
} else {
unitPrice = his[0].UnitPrice
}
skus, _ := dao.GetSkus(db, []int{v.SkuID}, nil, nil, nil, nil)
var skuBindInfos []*cms.StoreSkuBindInfo
skuBindInfo := &cms.StoreSkuBindInfo{
StoreID: v.StoreID,
NameID: skus[0].NameID,
UnitPrice: unitPrice,
}
skuBindInfos = append(skuBindInfos, skuBindInfo)
cms.UpdateStoresSkusByBind(ctx, nil, skuBindInfos, true, true, false)
}
return err
}

View File

@@ -606,7 +606,7 @@ func RefreshOrderEarningPrice3(order *model.GoodsOrder, payPercentage int, bill
// if order.VendorID == model.VendorIDJDShop || order.VendorID == model.VendorIDJX {
// order.NewEarningPrice = (order.TotalShopMoney - bill.DesiredFee) * int64((100 - payPercentage)) / 100
// } else {
order.NewEarningPrice = (order.TotalShopMoney - bill.DesiredFee) * int64((100 - payPercentage/2)) / 100
order.NewEarningPrice = order.TotalShopMoney*int64((100-payPercentage/2))/100 - bill.DesiredFee
// }
} else {
order.NewEarningPrice = order.EarningPrice

View File

@@ -166,29 +166,29 @@ func RefreshWeixin2Token() (err error) {
}
func RefreshWeixin3Token() (err error) {
if api.WeixinMiniAPI3 != nil {
err = RefreshConfig("wechat3", weixinTokenExpires, func() (token string, expireTimeStr string) {
globals.SugarLogger.Debugf("RefreshWeixin3Token RunMode:%s", beego.BConfig.RunMode)
if globals.IsMainProductEnv() {
if tokenInfo, err := api.WeixinMiniAPI3.CBRetrieveToken(); err == nil {
globals.SugarLogger.Debugf("RefreshWeixin3Token tokenInfo:%s", utils.Format4Output(tokenInfo, true))
token = tokenInfo.AccessToken
} else {
globals.SugarLogger.Errorf("RefreshWeixin3Token RefreshToken failed with error:%v", err)
}
} else {
if tokenInfo := getWX3TokenFromRemote(api.WeixinMiniAPI3.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.OnNewWX3Token(value)
api.WeixinMiniAPI3.CBSetToken(value)
})
}
// if api.WeixinMiniAPI3 != nil {
// err = RefreshConfig("wechat3", weixinTokenExpires, func() (token string, expireTimeStr string) {
// globals.SugarLogger.Debugf("RefreshWeixin3Token RunMode:%s", beego.BConfig.RunMode)
// if globals.IsMainProductEnv() {
// if tokenInfo, err := api.WeixinMiniAPI3.CBRetrieveToken(); err == nil {
// globals.SugarLogger.Debugf("RefreshWeixin3Token tokenInfo:%s", utils.Format4Output(tokenInfo, true))
// token = tokenInfo.AccessToken
// } else {
// globals.SugarLogger.Errorf("RefreshWeixin3Token RefreshToken failed with error:%v", err)
// }
// } else {
// if tokenInfo := getWX3TokenFromRemote(api.WeixinMiniAPI3.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.OnNewWX3Token(value)
// api.WeixinMiniAPI3.CBSetToken(value)
// })
// }
return err
}

View File

@@ -565,7 +565,7 @@ func GetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSyncInf
sm.vendor_id, sm.vendor_org_code, sm.yb_app_id, sm.yb_app_key,
t1.id bind_id, t1.price, t1.unit_price, t1.status store_sku_status,
t1.%s_sync_status sku_sync_status, t1.%s_price vendor_price, t1.%s_lock_time lock_time,
t1.store_id, t1.deleted_at bind_deleted_at,
t1.store_id, t1.deleted_at bind_deleted_at, t1.stock,
t2.*, t2.id sku_id, t2m.vendor_thing_id vendor_sku_id,
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.status name_status, t3.ex_prefix, t3.ex_prefix_begin, t3.ex_prefix_end, t3.category_id name_category_id,
IF(t11.%s <> '', t11.%s, t3.img) img,
@@ -1455,14 +1455,12 @@ func GetStoreSkuBindByNameID(db *DaoDB, storeID, nameID, status int) (storeSkuBi
AND a.name_id = ?
AND c.deleted_at = ?
AND a.deleted_at = ?
AND c.status = ?
`
sqlParams := []interface{}{
storeID,
nameID,
utils.DefaultTimeValue,
utils.DefaultTimeValue,
status,
}
err = GetRows(db, &storeSkuBind, sql, sqlParams...)
return storeSkuBind, err

View File

@@ -92,7 +92,7 @@ const (
SyncFlagSeqMask = 64 // 门店商家分类下的排序顺序
// combine
SyncFlagStoreSkuOnlyMask = SyncFlagSaleMask | SyncFlagPriceMask
SyncFlagStoreSkuOnlyMask = SyncFlagSaleMask | SyncFlagPriceMask | SyncFlagStockMask
SyncFlagStoreSkuModifiedMask = SyncFlagStoreSkuOnlyMask | SyncFlagModifiedMask
SyncFlagChangedMask = SyncFlagSpecMask | SyncFlagNewMask | SyncFlagDeletedMask | SyncFlagStoreSkuModifiedMask
)

View File

@@ -127,6 +127,13 @@ func result2Orders(msg *jdshopapi.CallBackResult) (order *model.GoodsOrder, err
return nil, err
}
if msg.IDSopShipmenttype == jdshopapi.IdSopShipmenttypeTC {
if time, err := api.JdShopAPI.GetOrderExtInfoByOrderId(order.VendorOrderID2); err == nil {
order.BusinessType = model.BusinessTypeDingshida
order.ExpectedDeliveredTime = utils.Str2Time(time)
}
}
//结算类型
storeDetail, _ := dao.GetStoreDetail(dao.GetDB(), order.StoreID, model.VendorIDJDShop)
if storeDetail != nil {

View File

@@ -1527,14 +1527,17 @@ func GetMatterOrderStatus(ctx *jxcontext.Context, vendorOrderID string) (result
if err != nil {
return nil, err
}
for _, v := range queryOrderStatus.OrderStatusList {
matter := &MatterOrderStatus{}
matter.Time = utils.Str2Time(v.OperateTime)
matter.Status = v.SoStatusName
matter.Name = v.SoStatusName
matter.Sign = 1
result = append(result, matter)
if len(queryOrderStatus.OrderStatusList) > 0 {
for _, v := range queryOrderStatus.OrderStatusList {
matter := &MatterOrderStatus{}
matter.Time = utils.Str2Time(v.OperateTime)
matter.Status = v.SoStatusName
matter.Name = v.SoStatusName
matter.Sign = 1
result = append(result, matter)
}
}
if len(getTrackMessagePlusByOrderResult.ResultData) > 0 {
for _, vv := range getTrackMessagePlusByOrderResult.ResultData {
matter := &MatterOrderStatus{}

View File

@@ -896,3 +896,24 @@ func (c *StoreSkuController) StoreSkuPriceAudit() {
}
})
}
// @Title 查看美团力荐或京东置顶商品
// @Description 查看美团力荐或京东置顶商品
// @Param token header string true "认证token"
// @Param vendorIDs formData string true "平台ids"
// @Param storeIDs formData string true "门店IDs"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetSpecialtyStoreSkus [post]
func (c *StoreSkuController) GetSpecialtyStoreSkus() {
c.callGetSpecialtyStoreSkus(func(params *tStoreSkuGetSpecialtyStoreSkusParams) (retVal interface{}, errCode string, err error) {
var (
storeIDs, vendorIDs []int
)
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.VendorIDs, &vendorIDs); err != nil {
return retVal, "", err
}
err = cms.GetSpecialtyStoreSkus(params.Ctx, storeIDs, vendorIDs)
return retVal, "", err
})
}

View File

@@ -60,7 +60,7 @@ var (
WeixinAPI *weixinapi.API // 微信公众号
WeixinMiniAPI *weixinapi.API // 小程序
WeixinMiniAPI2 *weixinapi.API // 小程序2
WeixinMiniAPI3 *weixinapi.API // 小程序3
WeixinApp *weixinapi.API // app微信登录
WeixinMiniAppID2 string
WeixinMiniAppID3 string
WxpayAPI *wxpayapi.API // 微信支付API
@@ -213,7 +213,7 @@ func Init() {
}
WeixinPageAPI = weixinapi.New(beego.AppConfig.String("weixinPageAppID"), beego.AppConfig.String("weixinPageSecret"))
if WeixinMiniAppID3 = beego.AppConfig.String("weixinMiniAppID3"); WeixinMiniAppID3 != "" {
WeixinMiniAPI3 = weixinapi.New(WeixinMiniAppID3, beego.AppConfig.String("weixinMiniSecret3"))
WeixinApp = weixinapi.New(WeixinMiniAppID3, beego.AppConfig.String("weixinMiniSecret3"))
}
if globals.WxpayNotifyURL != "" {
// WxpayAPI = wxpayapi.New(beego.AppConfig.String("wxpayAppID"), beego.AppConfig.String("wxpayAppKey"), beego.AppConfig.String("wxpayAppMchID"))

View File

@@ -2088,6 +2088,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: "GetSpecialtyStoreSkus",
Router: `/GetSpecialtyStoreSkus`,
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: "GetStoreAbnormalSkuCount",