Merge remote-tracking branch 'origin/jdshop' into jxact
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -92,7 +92,7 @@ const (
|
||||
SyncFlagSeqMask = 64 // 门店商家分类下的排序顺序
|
||||
|
||||
// combine
|
||||
SyncFlagStoreSkuOnlyMask = SyncFlagSaleMask | SyncFlagPriceMask
|
||||
SyncFlagStoreSkuOnlyMask = SyncFlagSaleMask | SyncFlagPriceMask | SyncFlagStockMask
|
||||
SyncFlagStoreSkuModifiedMask = SyncFlagStoreSkuOnlyMask | SyncFlagModifiedMask
|
||||
SyncFlagChangedMask = SyncFlagSpecMask | SyncFlagNewMask | SyncFlagDeletedMask | SyncFlagStoreSkuModifiedMask
|
||||
)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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{}
|
||||
|
||||
@@ -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
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user