Merge remote-tracking branch 'origin/mark' into su
This commit is contained in:
@@ -630,7 +630,7 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context,
|
|||||||
if fromDate != "" && toDate != "" {
|
if fromDate != "" && toDate != "" {
|
||||||
fromDateParam = utils.Str2Time(fromDate)
|
fromDateParam = utils.Str2Time(fromDate)
|
||||||
toDateParam = utils.Str2Time(toDate)
|
toDateParam = utils.Str2Time(toDate)
|
||||||
actList, _ := dao.QueryActs(db, actID, 0, math.MaxInt32, 0, "", -1, nil, nil, nil, 0, 0, 0, utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue)
|
actList, _ := dao.QueryActs(db, actID, 0, math.MaxInt32, 0, "", -1, nil, nil, nil, 0, nil, 0, utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue)
|
||||||
if len(actList.Data) > 0 {
|
if len(actList.Data) > 0 {
|
||||||
actBeginAt := actList.Data[0].BeginAt
|
actBeginAt := actList.Data[0].BeginAt
|
||||||
actEndAt := actList.Data[0].EndAt
|
actEndAt := actList.Data[0].EndAt
|
||||||
@@ -660,7 +660,7 @@ func (c *OrderManager) RefreshHistoryOrdersEarningPrice(ctx *jxcontext.Context,
|
|||||||
return "", model.ErrCodeGeneralFailed, errors.New(fmt.Sprintf("未查询到相关结算活动,活动ID:[%d]", actID))
|
return "", model.ErrCodeGeneralFailed, errors.New(fmt.Sprintf("未查询到相关结算活动,活动ID:[%d]", actID))
|
||||||
}
|
}
|
||||||
} else if fromDate == "" && toDate == "" {
|
} else if fromDate == "" && toDate == "" {
|
||||||
actList, _ := dao.QueryActs(db, actID, 0, math.MaxInt32, 0, "", -1, nil, nil, nil, 0, 0, 0, utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue)
|
actList, _ := dao.QueryActs(db, actID, 0, math.MaxInt32, 0, "", -1, nil, nil, nil, 0, nil, 0, utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue)
|
||||||
if len(actList.Data) > 0 {
|
if len(actList.Data) > 0 {
|
||||||
orderList, _ = dao.QueryOrders(db, vendorOrderID, actID, vendorIDs, storeID, actList.Data[0].BeginAt, actList.Data[0].EndAt)
|
orderList, _ = dao.QueryOrders(db, vendorOrderID, actID, vendorIDs, storeID, actList.Data[0].BeginAt, actList.Data[0].EndAt)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -151,6 +151,8 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Ac
|
|||||||
storeIDMap := make(map[int]int)
|
storeIDMap := make(map[int]int)
|
||||||
skuIDMap := make(map[int]int)
|
skuIDMap := make(map[int]int)
|
||||||
storeSkuParamMap := make(map[int][]*ActStoreSkuParam)
|
storeSkuParamMap := make(map[int][]*ActStoreSkuParam)
|
||||||
|
|
||||||
|
actStoreSkuMap := make(map[int64]bool)
|
||||||
var wrongSkuList []*ActStoreSkuParam
|
var wrongSkuList []*ActStoreSkuParam
|
||||||
for _, v := range actStoreSku {
|
for _, v := range actStoreSku {
|
||||||
if act.Type == model.ActSkuFake && v.EarningPrice == 0 {
|
if act.Type == model.ActSkuFake && v.EarningPrice == 0 {
|
||||||
@@ -159,6 +161,8 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Ac
|
|||||||
storeIDMap[v.StoreID] = 1
|
storeIDMap[v.StoreID] = 1
|
||||||
skuIDMap[v.SkuID] = 1
|
skuIDMap[v.SkuID] = 1
|
||||||
storeSkuParamMap[v.StoreID] = append(storeSkuParamMap[v.StoreID], v)
|
storeSkuParamMap[v.StoreID] = append(storeSkuParamMap[v.StoreID], v)
|
||||||
|
|
||||||
|
actStoreSkuMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(wrongSkuList) > 0 {
|
if len(wrongSkuList) > 0 {
|
||||||
@@ -167,14 +171,22 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Ac
|
|||||||
storeIDs := jxutils.IntMap2List(storeIDMap)
|
storeIDs := jxutils.IntMap2List(storeIDMap)
|
||||||
skuIDs := jxutils.IntMap2List(skuIDMap)
|
skuIDs := jxutils.IntMap2List(skuIDMap)
|
||||||
// 判断活动是否重叠的检查,当前忽略京东平台及所有结算信息
|
// 判断活动是否重叠的检查,当前忽略京东平台及所有结算信息
|
||||||
if act.OverlapRule == model.OverlapRuleNormal {
|
if act.OverlapRule == model.OverlapRuleNormal && act.Type != model.ActSkuFake {
|
||||||
effectActStoreSkuList, err := dao.GetEffectiveActStoreSkuInfo(db, 0, vendorIDs, act.Type, storeIDs, skuIDs, act.BeginAt, act.EndAt)
|
effectActStoreSkuList, err := dao.GetEffectiveActStoreSkuInfo(db, 0, vendorIDs, act.Type, storeIDs, skuIDs, act.BeginAt, act.EndAt)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
globals.SugarLogger.Errorf("GetEffectiveActStoreSkuInfo can not get sku promotion info for error:%v", err)
|
globals.SugarLogger.Errorf("GetEffectiveActStoreSkuInfo can not get sku promotion info for error:%v", err)
|
||||||
return nil, nil, nil, err
|
return nil, nil, nil, err
|
||||||
}
|
}
|
||||||
if len(effectActStoreSkuList) > 0 {
|
if len(effectActStoreSkuList) > 0 {
|
||||||
return nil, nil, nil, jsonerr.New(effectActStoreSkuList, model.ErrCodeJsonActSkuConflict)
|
var realEffectActStoreSkuList []*model.ActStoreSku2
|
||||||
|
for _, v := range effectActStoreSkuList {
|
||||||
|
if actStoreSkuMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] {
|
||||||
|
realEffectActStoreSkuList = append(realEffectActStoreSkuList, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(realEffectActStoreSkuList) > 0 {
|
||||||
|
return nil, nil, nil, jsonerr.New(realEffectActStoreSkuList, model.ErrCodeJsonActSkuConflict)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -685,7 +697,11 @@ func (a *ActManager) IsVendorActExist(ctx *jxcontext.Context, vendorActID string
|
|||||||
}
|
}
|
||||||
|
|
||||||
func QueryActs(ctx *jxcontext.Context, actID int, offset, pageSize int, syncStatus int, keyword string, vendorID int, statusList, actTypeList, createTypeList []int, storeID, skuID, cityCode int, beginAt, endAt, createdAtFrom, createdAtTo time.Time) (pagedInfo *dao.PagedActListInfo, err error) {
|
func QueryActs(ctx *jxcontext.Context, actID int, offset, pageSize int, syncStatus int, keyword string, vendorID int, statusList, actTypeList, createTypeList []int, storeID, skuID, cityCode int, beginAt, endAt, createdAtFrom, createdAtTo time.Time) (pagedInfo *dao.PagedActListInfo, err error) {
|
||||||
return dao.QueryActs(dao.GetDB(), actID, offset, pageSize, syncStatus, keyword, vendorID, statusList, actTypeList, createTypeList, storeID, skuID, cityCode, beginAt, endAt, createdAtFrom, createdAtTo)
|
var skuIDs []int
|
||||||
|
if skuID > 0 {
|
||||||
|
skuIDs = []int{skuID}
|
||||||
|
}
|
||||||
|
return dao.QueryActs(dao.GetDB(), actID, offset, pageSize, syncStatus, keyword, vendorID, statusList, actTypeList, createTypeList, storeID, skuIDs, cityCode, beginAt, endAt, createdAtFrom, createdAtTo)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetActStoreSkuInfo(ctx *jxcontext.Context, actID int, vendorIDs []int, keyword string, offset, pageSize int) (retVal interface{}, err error) {
|
func GetActStoreSkuInfo(ctx *jxcontext.Context, actID int, vendorIDs []int, keyword string, offset, pageSize int) (retVal interface{}, err error) {
|
||||||
@@ -889,7 +905,7 @@ func RefreshPageActs(ctx *jxcontext.Context, vendorIDs []int, createdFrom time.T
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
// actInfo, err2 := dao.QueryActs(db, 0, 0, -1, -1, "", vendorID, nil, []int{model.ActCreateTypeSpider},
|
// actInfo, err2 := dao.QueryActs(db, 0, 0, -1, -1, "", vendorID, nil, []int{model.ActCreateTypeSpider},
|
||||||
// nil, 0, 0, 0, utils.DefaultTimeValue, utils.DefaultTimeValue, createdFrom, utils.DefaultTimeValue)
|
// nil, 0, nil, 0, utils.DefaultTimeValue, utils.DefaultTimeValue, createdFrom, utils.DefaultTimeValue)
|
||||||
vendorActIDs, err2 := dao.GetExistVendorActIDs(db, vendorID)
|
vendorActIDs, err2 := dao.GetExistVendorActIDs(db, vendorID)
|
||||||
if err = err2; err != nil {
|
if err = err2; err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -975,16 +991,15 @@ func RefreshPageActs(ctx *jxcontext.Context, vendorIDs []int, createdFrom time.T
|
|||||||
func DeleteSkusFromAct(ctx *jxcontext.Context, vendorID int, actTypes, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
func DeleteSkusFromAct(ctx *jxcontext.Context, vendorID int, actTypes, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
actMap := make(map[int]*model.Act)
|
actMap := make(map[int]*model.Act)
|
||||||
for _, skuID := range skuIDs {
|
pagedInfo, err2 := dao.QueryActs(db, 0, 0, -1, -1, "", vendorID, []int{model.ActStatusCreated}, actTypes, nil, 0, skuIDs, 0,
|
||||||
pagedInfo, err2 := dao.QueryActs(db, 0, 0, -1, -1, "", vendorID, []int{model.ActStatusCreated}, actTypes, nil, 0, skuID, 0,
|
utils.DefaultTimeValue, utils.DefaultTimeValue, time.Now().Add(-24*30*3*time.Hour), utils.DefaultTimeValue)
|
||||||
utils.DefaultTimeValue, utils.DefaultTimeValue, time.Now().Add(-24*30*3*time.Hour), utils.DefaultTimeValue)
|
if err = err2; err != nil {
|
||||||
if err = err2; err != nil {
|
return "", err
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
for _, v := range pagedInfo.Data {
|
|
||||||
actMap[v.Act.ID] = &v.Act
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
for _, v := range pagedInfo.Data {
|
||||||
|
actMap[v.Act.ID] = &v.Act
|
||||||
|
}
|
||||||
|
|
||||||
if len(actMap) == 0 {
|
if len(actMap) == 0 {
|
||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1090,21 +1090,23 @@ func refreshStoreSkuPrice(ctx *jxcontext.Context, db *dao.DaoDB, skuID int) (err
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
for vendorID := range partner.PurchasePlatformHandlers {
|
list, err := dao.GetStoreSkusAndSkuName(db, nil, []int{skuID}, nil)
|
||||||
storeSkuList, err := dao.GetStoreSkus2(db, vendorID, 0, []int{skuID}, false)
|
for _, v := range list {
|
||||||
if err == nil {
|
storeID := v.StoreID
|
||||||
for _, v := range storeSkuList {
|
storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDJX)
|
||||||
v.Price = int64(jxutils.CaculateSkuPrice(int(v.UnitPrice), v.SpecQuality, v.SpecUnit, v.Unit))
|
if err != nil {
|
||||||
storeSku := &model.StoreSkuBind{}
|
return err
|
||||||
storeSku.ID = v.BindID
|
|
||||||
if _, err = dao.UpdateEntityLogically(db, storeSku, map[string]interface{}{
|
|
||||||
"Price": v.Price,
|
|
||||||
dao.GetSyncStatusStructField(model.VendorNames[vendorID]): v.SkuSyncStatus | model.SyncFlagPriceMask,
|
|
||||||
}, ctx.GetUserName(), nil); 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)
|
dao.Commit(db)
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
"unicode"
|
"unicode"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxstore/event"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi"
|
"git.rosy.net.cn/baseapi"
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/excel"
|
"git.rosy.net.cn/jx-callback/business/jxutils/excel"
|
||||||
@@ -828,6 +830,10 @@ func UpdateStoresSkusByBind(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBind
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
for _, storeID := range storeIDs {
|
for _, storeID := range storeIDs {
|
||||||
|
fmt.Println(storeID)
|
||||||
|
for _, v := range skuBindInfosMap[storeID] {
|
||||||
|
fmt.Println(*v)
|
||||||
|
}
|
||||||
skuIDs, err2 := updateStoresSkusWithoutSync(ctx, db, []int{storeID}, skuBindInfosMap[storeID], false)
|
skuIDs, err2 := updateStoresSkusWithoutSync(ctx, db, []int{storeID}, skuBindInfosMap[storeID], false)
|
||||||
if err = err2; err != nil {
|
if err = err2; err != nil {
|
||||||
dao.Rollback(db)
|
dao.Rollback(db)
|
||||||
@@ -1035,6 +1041,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
if tmpStatus := getSkuSaleStatus(inSkuBind, skuBindInfo); tmpStatus != model.StoreSkuBindStatusNA {
|
if tmpStatus := getSkuSaleStatus(inSkuBind, skuBindInfo); tmpStatus != model.StoreSkuBindStatusNA {
|
||||||
skuBind.Status = tmpStatus
|
skuBind.Status = tmpStatus
|
||||||
}
|
}
|
||||||
|
// err = AddEventDetail(model.OperateAdd, v.RealSkuID, model.ThingTypeSku, storeID, ctx.GetTrackInfo(), "", "")
|
||||||
setStoreSkuBindStatus(skuBind, model.SyncFlagNewMask)
|
setStoreSkuBindStatus(skuBind, model.SyncFlagNewMask)
|
||||||
dao.WrapAddIDCULDEntity(skuBind, userName)
|
dao.WrapAddIDCULDEntity(skuBind, userName)
|
||||||
// globals.SugarLogger.Debug(utils.Format4Output(skuBind, false))
|
// globals.SugarLogger.Debug(utils.Format4Output(skuBind, false))
|
||||||
@@ -1059,8 +1066,8 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
skuBind = &v.StoreSkuBind
|
skuBind = &v.StoreSkuBind
|
||||||
|
|
||||||
if skuBindInfo.IsFocus == -1 && isCanChangePrice {
|
if skuBindInfo.IsFocus == -1 && isCanChangePrice {
|
||||||
|
// err = AddEventDetail(model.OperateDelete, skuBind.SkuID, model.ThingTypeSku, storeID, ctx.GetTrackInfo(), "", "")
|
||||||
if num, err = dao.DeleteEntityLogically(db, skuBind, map[string]interface{}{
|
if num, err = dao.DeleteEntityLogically(db, skuBind, map[string]interface{}{
|
||||||
model.FieldStatus: model.StoreSkuBindStatusDeleted,
|
model.FieldStatus: model.StoreSkuBindStatusDeleted,
|
||||||
model.FieldJdSyncStatus: model.SyncFlagDeletedMask,
|
model.FieldJdSyncStatus: model.SyncFlagDeletedMask,
|
||||||
@@ -1072,7 +1079,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 用了SELECT FOR UPDATE后,只更新修改字段是没有必要的,暂时保留
|
// 用了SELECT FOR UPDATE后,只更新修改字段是没有必要的,暂时保留
|
||||||
updateFieldMap := make(map[string]int)
|
updateFieldMap := make(map[string]interface{})
|
||||||
if skuBindInfo.IsFocus == 1 { // 关注之后再关注不操作
|
if skuBindInfo.IsFocus == 1 { // 关注之后再关注不操作
|
||||||
// skuBind.Status = model.StoreSkuBindStatusDontSale // 缺省不可售?
|
// skuBind.Status = model.StoreSkuBindStatusDontSale // 缺省不可售?
|
||||||
// skuBind.DeletedAt = utils.DefaultTimeValue
|
// skuBind.DeletedAt = utils.DefaultTimeValue
|
||||||
@@ -1089,33 +1096,36 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
setStoreSkuBindStatus(skuBind, model.SyncFlagSaleMask)
|
setStoreSkuBindStatus(skuBind, model.SyncFlagSaleMask)
|
||||||
updateFieldMap[model.FieldStatus] = 1
|
updateFieldMap[model.FieldStatus] = 1
|
||||||
}
|
}
|
||||||
if skuBindInfo.UnitPrice != 0 && skuBind.UnitPrice != unitPrice && isCanChangePrice { // 这里是否需要加此条件限制
|
if skuBindInfo.UnitPrice != 0 && isCanChangePrice { // 这里是否需要加此条件限制
|
||||||
skuBind.UnitPrice = unitPrice
|
price := jxutils.CaculateSkuPrice(unitPrice, v.SpecQuality, v.SpecUnit, v.SkuNameUnit)
|
||||||
skuBind.Price = jxutils.CaculateSkuPrice(unitPrice, v.SpecQuality, v.SpecUnit, v.SkuNameUnit)
|
jxPrice := jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), price)
|
||||||
skuBind.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), skuBind.Price)
|
if unitPrice != skuBind.UnitPrice || price != skuBind.Price || jxPrice != skuBind.JxPrice {
|
||||||
setStoreSkuBindStatus(skuBind, model.SyncFlagPriceMask)
|
if price != skuBind.Price {
|
||||||
updateFieldMap["UnitPrice"] = 1
|
setStoreSkuBindStatus(skuBind, model.SyncFlagPriceMask)
|
||||||
updateFieldMap["Price"] = 1
|
updateFieldMap["Price"] = 1
|
||||||
updateFieldMap["JxPrice"] = 1
|
}
|
||||||
|
skuBind.UnitPrice = unitPrice
|
||||||
|
skuBind.Price = price
|
||||||
|
skuBind.JxPrice = jxPrice
|
||||||
|
updateFieldMap["UnitPrice"] = 1
|
||||||
|
updateFieldMap["JxPrice"] = 1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if skuBindInfo.StatusSaleBegin != 0 && skuBindInfo.StatusSaleEnd != 0 {
|
if skuBindInfo.StatusSaleBegin != 0 && skuBindInfo.StatusSaleEnd != 0 {
|
||||||
if err := ValidateStruct(skuBindInfo); err != nil {
|
if err := ValidateStruct(skuBindInfo); err != nil {
|
||||||
dao.Rollback(db)
|
globals.SugarLogger.Infof("更改商品:%s, 可售时间不合法!时间范围:[%v] 至 [%v]", allBinds[0].Name, skuBindInfo.StatusSaleBegin, skuBindInfo.StatusSaleEnd)
|
||||||
return nil, fmt.Errorf("更改商品:%s, 可售时间不合法!时间范围:[%v] 至 [%v]", allBinds[0].Name, skuBindInfo.StatusSaleBegin, skuBindInfo.StatusSaleEnd)
|
} else {
|
||||||
|
updateFieldMap["StatusSaleBegin"] = int(skuBindInfo.StatusSaleBegin)
|
||||||
|
updateFieldMap["StatusSaleEnd"] = int(skuBindInfo.StatusSaleEnd)
|
||||||
|
skuBind.StatusSaleBegin = skuBindInfo.StatusSaleBegin
|
||||||
|
skuBind.StatusSaleEnd = skuBindInfo.StatusSaleEnd
|
||||||
}
|
}
|
||||||
updateFieldMap["StatusSaleBegin"] = int(skuBindInfo.StatusSaleBegin)
|
|
||||||
updateFieldMap["StatusSaleEnd"] = int(skuBindInfo.StatusSaleEnd)
|
|
||||||
skuBind.StatusSaleBegin = skuBindInfo.StatusSaleBegin
|
|
||||||
skuBind.StatusSaleEnd = skuBindInfo.StatusSaleEnd
|
|
||||||
}
|
}
|
||||||
// todo 这里应该是不需处理这个信息的吧?
|
// if updateFieldMap != nil {
|
||||||
// if inSkuBind != nil && inSkuBind.EbaiID != 0 {
|
// afterData := utils.MustMarshal(updateFieldMap)
|
||||||
// skuBind.EbaiID = inSkuBind.EbaiID
|
// mapresult := refutil.FindMapAndStructMixed(updateFieldMap, skuBind)
|
||||||
// updateFieldMap["EbaiID"] = 1
|
// beforeData := utils.MustMarshal(mapresult)
|
||||||
// }
|
// AddEventDetail(model.OperateUpdate, v.RealSkuID, model.ThingTypeSku, storeID, ctx.GetTrackInfo(), string(beforeData), string(afterData))
|
||||||
// if inSkuBind != nil && inSkuBind.ElmID != 0 {
|
|
||||||
// skuBind.ElmID = inSkuBind.ElmID
|
|
||||||
// updateFieldMap["ElmID"] = 1
|
|
||||||
// }
|
// }
|
||||||
if len(updateFieldMap) > 0 {
|
if len(updateFieldMap) > 0 {
|
||||||
updateFieldMap[model.FieldJdSyncStatus] = 1
|
updateFieldMap[model.FieldJdSyncStatus] = 1
|
||||||
@@ -1124,9 +1134,11 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
updateFieldMap[model.FieldUpdatedAt] = 1
|
updateFieldMap[model.FieldUpdatedAt] = 1
|
||||||
updateFieldMap[model.FieldLastOperator] = 1
|
updateFieldMap[model.FieldLastOperator] = 1
|
||||||
|
|
||||||
// setStoreSkuBindStatus(skuBind, model.SyncFlagModifiedMask)
|
|
||||||
dao.WrapUpdateULEntity(skuBind, userName)
|
dao.WrapUpdateULEntity(skuBind, userName)
|
||||||
skuBind.AutoSaleAt = utils.DefaultTimeValue
|
if skuBind.Status == model.SkuStatusNormal {
|
||||||
|
updateFieldMap["AutoSaleAt"] = 1
|
||||||
|
skuBind.AutoSaleAt = utils.DefaultTimeValue
|
||||||
|
}
|
||||||
if num, err = dao.UpdateEntity(db, skuBind /*, utils.Map2KeySlice(updateFieldMap)...*/); err != nil {
|
if num, err = dao.UpdateEntity(db, skuBind /*, utils.Map2KeySlice(updateFieldMap)...*/); err != nil {
|
||||||
dao.Rollback(db)
|
dao.Rollback(db)
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -1166,6 +1178,20 @@ func getSkuSaleStatus(inSkuBind *StoreSkuBindSkuInfo, skuNameBindInfo *StoreSkuB
|
|||||||
return model.StoreSkuBindStatusNA
|
return model.StoreSkuBindStatusNA
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AddEventDetail(operateType, thingID, thingType, storeID int, accessUUID, beforeData, afterData string) (err error) {
|
||||||
|
operateEventDetail := &model.OperateEventDetail{
|
||||||
|
OperateType: operateType,
|
||||||
|
ThingID: thingID,
|
||||||
|
ThingType: thingType,
|
||||||
|
StoreID: storeID,
|
||||||
|
AccessUUID: accessUUID,
|
||||||
|
BeforeData: beforeData,
|
||||||
|
AfterData: afterData,
|
||||||
|
}
|
||||||
|
err = event.AddOperateEventDetail(operateEventDetail)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func formatAutoSaleTime(autoSaleTime time.Time) (outAutoSaleTime time.Time) {
|
func formatAutoSaleTime(autoSaleTime time.Time) (outAutoSaleTime time.Time) {
|
||||||
if utils.IsTimeZero(autoSaleTime) {
|
if utils.IsTimeZero(autoSaleTime) {
|
||||||
outAutoSaleTime = utils.DefaultTimeValue
|
outAutoSaleTime = utils.DefaultTimeValue
|
||||||
@@ -2921,60 +2947,153 @@ func GetCellForFocusStoreSkus(db *dao.DaoDB, rowNum int, row []string, sheetPara
|
|||||||
skuMap[skuID] = price
|
skuMap[skuID] = price
|
||||||
}
|
}
|
||||||
|
|
||||||
func FocusStoreSkusBySku(ctx *jxcontext.Context, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
func FocusStoreSkusBySku(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBindInfo, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
var (
|
var result1 []interface{}
|
||||||
skuNameMap = make(map[int][]*StoreSkuBindSkuInfo)
|
|
||||||
storeIDs []int
|
|
||||||
result1 []interface{}
|
|
||||||
)
|
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
skuList, err := dao.GetSkus(db, skuIDs, nil, nil, nil)
|
taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
||||||
|
switch step {
|
||||||
|
case 0:
|
||||||
|
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
var (
|
||||||
|
price int
|
||||||
|
payPercentage int
|
||||||
|
)
|
||||||
|
skuBindInfo := batchItemList[0].(*StoreSkuBindInfo)
|
||||||
|
storeID := skuBindInfo.StoreID
|
||||||
|
skuID := skuBindInfo.Skus[0].SkuID
|
||||||
|
store, err := dao.GetStoreDetail(db, storeID, -1)
|
||||||
|
if err != nil {
|
||||||
|
return retVal, err
|
||||||
|
}
|
||||||
|
skuList, err := dao.GetSkus(db, []int{skuID}, nil, nil, nil)
|
||||||
|
if err != nil {
|
||||||
|
return retVal, err
|
||||||
|
}
|
||||||
|
if len(skuList) == 0 {
|
||||||
|
return retVal, fmt.Errorf("未查询到此商品!商品id :[%V]", skuID)
|
||||||
|
}
|
||||||
|
focusList, _ := dao.GetStoreSkuBindByNameID(db, storeID, skuList[0].NameID, model.StoreSkuBindStatusNormal)
|
||||||
|
//有关注过
|
||||||
|
if len(focusList) > 0 {
|
||||||
|
price = focusList[0].UnitPrice
|
||||||
|
} else {
|
||||||
|
if store.PayPercentage < 50 {
|
||||||
|
payPercentage = 70
|
||||||
|
} else {
|
||||||
|
payPercentage = store.PayPercentage
|
||||||
|
}
|
||||||
|
priceReferList, _ := dao.GetPriceReferSnapshotNoPage(db, []int{store.CityCode}, nil, []int{skuList[0].NameID}, utils.Time2Date(time.Now().AddDate(0, 0, -1)))
|
||||||
|
if len(priceReferList) > 0 {
|
||||||
|
price = priceReferList[0].MidUnitPrice * payPercentage / 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
skuBindSkuInfo := &StoreSkuBindSkuInfo{
|
||||||
|
SkuID: skuID,
|
||||||
|
IsSale: 1,
|
||||||
|
}
|
||||||
|
var skuBindSkuInfos []*StoreSkuBindSkuInfo
|
||||||
|
skuBindSkuInfos = append(skuBindSkuInfos, skuBindSkuInfo)
|
||||||
|
skuBindInfo2 := &StoreSkuBindInfo{
|
||||||
|
StoreID: storeID,
|
||||||
|
NameID: skuList[0].NameID,
|
||||||
|
UnitPrice: price,
|
||||||
|
IsFocus: 1,
|
||||||
|
Skus: skuBindSkuInfos,
|
||||||
|
}
|
||||||
|
retVal = []*StoreSkuBindInfo{skuBindInfo2}
|
||||||
|
return retVal, err
|
||||||
|
}
|
||||||
|
taskParallel := tasksch.NewParallelTask("根据skuID部分关注商品", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, taskFunc, skuBindInfos)
|
||||||
|
tasksch.HandleTask(taskParallel, task, true).Run()
|
||||||
|
result1, _ = taskParallel.GetResult(0)
|
||||||
|
case 1:
|
||||||
|
var skuBindInfos []*StoreSkuBindInfo
|
||||||
|
for _, v := range result1 {
|
||||||
|
skuBindInfos = append(skuBindInfos, v.(*StoreSkuBindInfo))
|
||||||
|
}
|
||||||
|
hint, err = UpdateStoresSkusByBind(ctx, skuBindInfos, isAsync, isContinueWhenError)
|
||||||
|
}
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
taskSeq := tasksch.NewSeqTask2("根据skuID批量部分关注商品", 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 AutoFocusStoreSkusWithoutFocusForTopSkus(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
|
db := dao.GetDB()
|
||||||
|
var (
|
||||||
|
skuBindInfoList []*StoreSkuBindInfo
|
||||||
|
result1 []interface{}
|
||||||
|
)
|
||||||
storeList, err := dao.GetStoreList(db, nil, nil, "")
|
storeList, err := dao.GetStoreList(db, nil, nil, "")
|
||||||
taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
||||||
switch step {
|
switch step {
|
||||||
case 0:
|
case 0:
|
||||||
for _, v := range storeList {
|
|
||||||
storeIDs = append(storeIDs, v.ID)
|
|
||||||
}
|
|
||||||
for _, v := range skuList {
|
|
||||||
skuNameMap[v.NameID] = append(skuNameMap[v.NameID], &StoreSkuBindSkuInfo{
|
|
||||||
SkuID: v.ID,
|
|
||||||
IsSale: 1,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
case 1:
|
|
||||||
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
store := batchItemList[0].(*model.Store)
|
v := batchItemList[0].(*model.Store)
|
||||||
for k, v := range skuNameMap {
|
var (
|
||||||
var price int
|
skuName []*model.SkuName
|
||||||
focusList, _ := dao.GetStoreSkuBindByNameID(db, store.ID, k, model.StoreSkuBindStatusNormal)
|
skuNameMap = make(map[int]int)
|
||||||
//有关注过
|
)
|
||||||
if len(focusList) > 0 {
|
sql := `
|
||||||
price = focusList[0].UnitPrice
|
SELECT DISTINCT a.name_id id
|
||||||
} else {
|
FROM sku a
|
||||||
var payPercentage int
|
LEFT JOIN (SELECT DISTINCT b.name_id
|
||||||
if store.PayPercentage < 50 {
|
FROM store_sku_bind a
|
||||||
payPercentage = 70
|
JOIN sku b ON a.sku_id = b.id
|
||||||
} else {
|
WHERE a.deleted_at = ?
|
||||||
payPercentage = store.PayPercentage
|
AND store_id = ?)b ON a.name_id = b.name_id
|
||||||
}
|
WHERE a.status = ?
|
||||||
priceReferList, _ := dao.GetPriceReferSnapshotNoPage(db, []int{store.CityCode}, nil, []int{k}, utils.Time2Date(time.Now().AddDate(0, 0, -1)))
|
AND a.deleted_at = ?
|
||||||
if len(priceReferList) > 0 {
|
AND b.name_id IS NULL
|
||||||
price = priceReferList[0].MidUnitPrice * payPercentage / 100
|
`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
v.ID,
|
||||||
|
model.SkuStatusNormal,
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
}
|
||||||
|
err = dao.GetRows(db, &skuName, sql, sqlParams...)
|
||||||
|
for _, v := range skuName {
|
||||||
|
skuNameMap[v.ID] = v.ID
|
||||||
|
}
|
||||||
|
skuNameAndPlaceList, err2 := GetTopSkusByCityCode(ctx, v.CityCode, v.ID)
|
||||||
|
if err2 != nil {
|
||||||
|
return retVal, err2
|
||||||
|
}
|
||||||
|
var payPercentage int
|
||||||
|
if v.PayPercentage < 50 {
|
||||||
|
payPercentage = 70
|
||||||
|
} else {
|
||||||
|
payPercentage = v.PayPercentage
|
||||||
|
}
|
||||||
|
if len(skuNameAndPlaceList) > 0 {
|
||||||
|
for _, vv := range skuNameAndPlaceList {
|
||||||
|
if skuNameMap[vv.ID] != 0 {
|
||||||
|
priceReferList, err := dao.GetPriceReferSnapshotNoPage(db, []int{vv.CityCode}, nil, []int{vv.ID}, utils.Time2Date(time.Now().AddDate(0, 0, -1)))
|
||||||
|
if err == nil && len(priceReferList) > 0 {
|
||||||
|
storeSkuBindInfo := &StoreSkuBindInfo{
|
||||||
|
StoreID: v.ID,
|
||||||
|
NameID: vv.ID,
|
||||||
|
UnitPrice: priceReferList[0].MidUnitPrice * payPercentage / 100,
|
||||||
|
IsFocus: 1,
|
||||||
|
IsSale: 0,
|
||||||
|
}
|
||||||
|
skuBindInfoList = append(skuBindInfoList, storeSkuBindInfo)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
skuBindInfo := &StoreSkuBindInfo{
|
|
||||||
StoreID: store.ID,
|
|
||||||
NameID: k,
|
|
||||||
UnitPrice: price,
|
|
||||||
IsFocus: 1,
|
|
||||||
Skus: v,
|
|
||||||
}
|
|
||||||
retVal = []*StoreSkuBindInfo{skuBindInfo}
|
|
||||||
}
|
}
|
||||||
return retVal, err
|
return retVal, err
|
||||||
}
|
}
|
||||||
taskParallel := tasksch.NewParallelTask("根据skuID部分关注商品", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, taskFunc, storeList)
|
taskParallel := tasksch.NewParallelTask("自动关注畅销品", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, taskFunc, storeList)
|
||||||
tasksch.HandleTask(taskParallel, task, true).Run()
|
tasksch.HandleTask(taskParallel, task, true).Run()
|
||||||
result1, _ = taskParallel.GetResult(0)
|
result1, _ = taskParallel.GetResult(0)
|
||||||
case 2:
|
case 2:
|
||||||
@@ -2986,7 +3105,7 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuIDs []int, isAsync, isContin
|
|||||||
}
|
}
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
taskSeq := tasksch.NewSeqTask2("根据skuID批量部分关注商品", ctx, isContinueWhenError, taskSeqFunc, 3)
|
taskSeq := tasksch.NewSeqTask2("自动关注畅销品", ctx, isContinueWhenError, taskSeqFunc, 3)
|
||||||
tasksch.HandleTask(taskSeq, nil, true).Run()
|
tasksch.HandleTask(taskSeq, nil, true).Run()
|
||||||
if !isAsync {
|
if !isAsync {
|
||||||
_, err = taskSeq.GetResult(0)
|
_, err = taskSeq.GetResult(0)
|
||||||
@@ -2997,69 +3116,6 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuIDs []int, isAsync, isContin
|
|||||||
return hint, err
|
return hint, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func AutoFocusStoreSkusWithoutFocusForTopSkus(ctx *jxcontext.Context) (err error) {
|
|
||||||
db := dao.GetDB()
|
|
||||||
var skuBindInfoList []*StoreSkuBindInfo
|
|
||||||
storeList, err := dao.GetStoreList(db, nil, nil, "")
|
|
||||||
for _, v := range storeList {
|
|
||||||
var (
|
|
||||||
skuName []*model.SkuName
|
|
||||||
skuNameMap = make(map[int]int)
|
|
||||||
)
|
|
||||||
sql := `
|
|
||||||
SELECT DISTINCT a.name_id id
|
|
||||||
FROM sku a
|
|
||||||
LEFT JOIN (SELECT DISTINCT b.name_id
|
|
||||||
FROM store_sku_bind a
|
|
||||||
JOIN sku b ON a.sku_id = b.id
|
|
||||||
WHERE a.deleted_at = ?
|
|
||||||
AND store_id = ?)b ON a.name_id = b.name_id
|
|
||||||
WHERE a.status = ?
|
|
||||||
AND a.deleted_at = ?
|
|
||||||
AND b.name_id IS NULL
|
|
||||||
`
|
|
||||||
sqlParams := []interface{}{
|
|
||||||
utils.DefaultTimeValue,
|
|
||||||
v.ID,
|
|
||||||
model.SkuStatusNormal,
|
|
||||||
utils.DefaultTimeValue,
|
|
||||||
}
|
|
||||||
err = dao.GetRows(db, &skuName, sql, sqlParams...)
|
|
||||||
for _, v := range skuName {
|
|
||||||
skuNameMap[v.ID] = v.ID
|
|
||||||
}
|
|
||||||
skuNameAndPlaceList, err2 := GetTopSkusByCityCode(ctx, v.CityCode, v.ID)
|
|
||||||
if err2 != nil {
|
|
||||||
return err2
|
|
||||||
}
|
|
||||||
var payPercentage int
|
|
||||||
if v.PayPercentage < 50 {
|
|
||||||
payPercentage = 70
|
|
||||||
} else {
|
|
||||||
payPercentage = v.PayPercentage
|
|
||||||
}
|
|
||||||
if len(skuNameAndPlaceList) > 0 {
|
|
||||||
for _, vv := range skuNameAndPlaceList {
|
|
||||||
if skuNameMap[vv.ID] != 0 {
|
|
||||||
priceReferList, err := dao.GetPriceReferSnapshotNoPage(db, []int{vv.CityCode}, nil, []int{vv.ID}, utils.Time2Date(time.Now().AddDate(0, 0, -1)))
|
|
||||||
if err == nil && len(priceReferList) > 0 {
|
|
||||||
storeSkuBindInfo := &StoreSkuBindInfo{
|
|
||||||
StoreID: v.ID,
|
|
||||||
NameID: vv.ID,
|
|
||||||
UnitPrice: priceReferList[0].MidUnitPrice * payPercentage / 100,
|
|
||||||
IsFocus: 1,
|
|
||||||
IsSale: 0,
|
|
||||||
}
|
|
||||||
skuBindInfoList = append(skuBindInfoList, storeSkuBindInfo)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
UpdateStoresSkusByBind(ctx, skuBindInfoList, true, true)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func AutoFocusStoreSkusWithoutFocus(ctx *jxcontext.Context, skuIDs []int, isSync bool) (err error) {
|
func AutoFocusStoreSkusWithoutFocus(ctx *jxcontext.Context, skuIDs []int, isSync bool) (err error) {
|
||||||
var (
|
var (
|
||||||
nameMap = make(map[int]*StoreSkuBindInfo)
|
nameMap = make(map[int]*StoreSkuBindInfo)
|
||||||
@@ -3075,8 +3131,8 @@ func AutoFocusStoreSkusWithoutFocus(ctx *jxcontext.Context, skuIDs []int, isSync
|
|||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
skuBindInfo := &StoreSkuBindInfo{
|
skuBindInfo := &StoreSkuBindInfo{
|
||||||
UnitPrice: vv.UnitPrice,
|
UnitPrice: int(vv.UnitPrice),
|
||||||
NameID: vv.ID,
|
NameID: vv.NameID,
|
||||||
StoreID: v.ID,
|
StoreID: v.ID,
|
||||||
Skus: []*StoreSkuBindSkuInfo{},
|
Skus: []*StoreSkuBindSkuInfo{},
|
||||||
}
|
}
|
||||||
@@ -3127,6 +3183,6 @@ func UpdateStoreSkuNamePrice(ctx *jxcontext.Context, storeID, nameID, unitPrice
|
|||||||
// for _, v := range skuList {
|
// for _, v := range skuList {
|
||||||
// skuIDs = append(skuIDs, v.ID)
|
// skuIDs = append(skuIDs, v.ID)
|
||||||
// }
|
// }
|
||||||
// actStoreSkuList, err :=dao.GetEffectiveActStoreSkuInfo(db, 0, nil, model.ActSkuDirectDown, []int{storeID}, skuIDs, time.Now(),time.Now())
|
// actStoreSkuList, err := dao.GetEffectiveActStoreSkuInfo(db, 0, nil, model.ActSkuDirectDown, []int{storeID}, skuIDs, time.Now(), time.Now())
|
||||||
return hint, err
|
return hint, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -209,7 +209,9 @@ func FullSyncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo
|
|||||||
}
|
}
|
||||||
|
|
||||||
func isStoreSkuSyncNeedDelete(storeSku *dao.StoreSkuSyncInfo) bool {
|
func isStoreSkuSyncNeedDelete(storeSku *dao.StoreSkuSyncInfo) bool {
|
||||||
return model.IsSyncStatusDelete(storeSku.SkuSyncStatus) || storeSku.BindDeletedAt != utils.DefaultTimeValue || storeSku.BindID == 0 || storeSku.NameID == 0
|
return model.IsSyncStatusDelete(storeSku.SkuSyncStatus) ||
|
||||||
|
storeSku.BindDeletedAt != utils.DefaultTimeValue || storeSku.BindID == 0 ||
|
||||||
|
storeSku.NameID == 0 || storeSku.NameStatus != model.SkuStatusNormal || storeSku.Status != model.SkuStatusNormal
|
||||||
}
|
}
|
||||||
|
|
||||||
func storeSkuSyncInfo2Bare(inSku *dao.StoreSkuSyncInfo) (outSku *partner.StoreSkuInfo) {
|
func storeSkuSyncInfo2Bare(inSku *dao.StoreSkuSyncInfo) (outSku *partner.StoreSkuInfo) {
|
||||||
@@ -253,7 +255,7 @@ func formalizeStoreSkuList(inSkuList []*dao.StoreSkuSyncInfo) []*dao.StoreSkuSyn
|
|||||||
if skuItem.VendorPrice > skuItem.BoxFee {
|
if skuItem.VendorPrice > skuItem.BoxFee {
|
||||||
skuItem.BoxFee = boxFee
|
skuItem.BoxFee = boxFee
|
||||||
}
|
}
|
||||||
skuItem.MergedStatus = jxutils.MergeSkuStatus(skuItem.Status, skuItem.StoreSkuStatus)
|
skuItem.MergedStatus = jxutils.MergeSkuStatus(jxutils.MergeSkuStatus(skuItem.NameStatus, skuItem.Status), skuItem.StoreSkuStatus)
|
||||||
skuItem.SkuName = jxutils.ComposeSkuNameSync(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 0, skuItem.ExPrefix, skuItem.ExPrefixBegin, skuItem.ExPrefixEnd)
|
skuItem.SkuName = jxutils.ComposeSkuNameSync(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 0, skuItem.ExPrefix, skuItem.ExPrefixBegin, skuItem.ExPrefixEnd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ func GetActStoreSkuVendorInfo(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs
|
|||||||
}
|
}
|
||||||
|
|
||||||
func QueryActs(db *DaoDB, actID int, offset, pageSize int, syncStatus int, keyword string, vendorID int, statusList, actTypeList, createTypeList []int,
|
func QueryActs(db *DaoDB, actID int, offset, pageSize int, syncStatus int, keyword string, vendorID int, statusList, actTypeList, createTypeList []int,
|
||||||
storeID, skuID, cityCode int, beginAt, endAt, createdAtFrom, createdAtTo time.Time) (pagedInfo *PagedActListInfo, err error) {
|
storeID int, skuIDs []int, cityCode int, beginAt, endAt, createdAtFrom, createdAtTo time.Time) (pagedInfo *PagedActListInfo, err error) {
|
||||||
if actID == 0 && utils.IsTimeZero(createdAtFrom) && utils.IsTimeZero(beginAt) {
|
if actID == 0 && utils.IsTimeZero(createdAtFrom) && utils.IsTimeZero(beginAt) {
|
||||||
return nil, fmt.Errorf("actID,createdAtFrom和beginAt中,至少要指定一个条件")
|
return nil, fmt.Errorf("actID,createdAtFrom和beginAt中,至少要指定一个条件")
|
||||||
}
|
}
|
||||||
@@ -231,7 +231,7 @@ func QueryActs(db *DaoDB, actID int, offset, pageSize int, syncStatus int, keywo
|
|||||||
}
|
}
|
||||||
sql += ")"
|
sql += ")"
|
||||||
}
|
}
|
||||||
if storeID > 0 || skuID > 0 || cityCode > 0 {
|
if storeID > 0 || len(skuIDs) > 0 || cityCode > 0 {
|
||||||
sql += ` AND (SELECT COUNT(*)
|
sql += ` AND (SELECT COUNT(*)
|
||||||
FROM act_store_sku t2`
|
FROM act_store_sku t2`
|
||||||
if cityCode > 0 {
|
if cityCode > 0 {
|
||||||
@@ -245,9 +245,9 @@ func QueryActs(db *DaoDB, actID int, offset, pageSize int, syncStatus int, keywo
|
|||||||
sql += " AND t2.store_id = ?"
|
sql += " AND t2.store_id = ?"
|
||||||
sqlParams = append(sqlParams, storeID)
|
sqlParams = append(sqlParams, storeID)
|
||||||
}
|
}
|
||||||
if skuID > 0 {
|
if len(skuIDs) > 0 {
|
||||||
sql += " AND t2.sku_id = ?"
|
sql += " AND t2.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
||||||
sqlParams = append(sqlParams, skuID)
|
sqlParams = append(sqlParams, skuIDs)
|
||||||
}
|
}
|
||||||
sql += ") > 0"
|
sql += ") > 0"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,6 +99,9 @@ type StoreSkuSyncInfo struct {
|
|||||||
SkuName string
|
SkuName string
|
||||||
StatusSaleBegin int16 `json:"statusSaleBegin"` //商品可售时间范围
|
StatusSaleBegin int16 `json:"statusSaleBegin"` //商品可售时间范围
|
||||||
StatusSaleEnd int16 `json:"statusSaleEnd"`
|
StatusSaleEnd int16 `json:"statusSaleEnd"`
|
||||||
|
JdSyncStatus int8 `orm:"default(2)"`
|
||||||
|
MtwmSyncStatus int8 `orm:"default(2)"`
|
||||||
|
EbaiSyncStatus int8 `orm:"default(2)"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type MissingStoreSkuInfo struct {
|
type MissingStoreSkuInfo struct {
|
||||||
@@ -354,7 +357,7 @@ func newGetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty
|
|||||||
%s vendor_sku_id, t1.%s_sync_status sku_sync_status, t1.%s_price vendor_price, t1.%s_lock_time lock_time,
|
%s vendor_sku_id, 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.status_sale_begin,t1.status_sale_end,
|
t1.store_id, t1.deleted_at bind_deleted_at,t1.status_sale_begin,t1.status_sale_end,
|
||||||
t2.*,
|
t2.*,
|
||||||
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.ex_prefix, t3.ex_prefix_begin, t3.ex_prefix_end,
|
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,
|
||||||
IF(t11.%s <> '', t11.%s, t3.img) img,
|
IF(t11.%s <> '', t11.%s, t3.img) img,
|
||||||
IF(t12.%s <> '', t12.%s, t3.img2) img2,
|
IF(t12.%s <> '', t12.%s, t3.img2) img2,
|
||||||
t13.%s desc_img,
|
t13.%s desc_img,
|
||||||
@@ -379,8 +382,8 @@ func newGetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty
|
|||||||
sql += `
|
sql += `
|
||||||
FROM store_sku_bind t1
|
FROM store_sku_bind t1
|
||||||
JOIN store_map t14 ON t14.store_id = t1.store_id AND t14.vendor_id = ? AND t14.deleted_at = ?
|
JOIN store_map t14 ON t14.store_id = t1.store_id AND t14.vendor_id = ? AND t14.deleted_at = ?
|
||||||
LEFT JOIN sku t2 ON t1.sku_id = t2.id AND t2.deleted_at = ? AND t2.status = ?
|
LEFT JOIN sku t2 ON t1.sku_id = t2.id AND t2.deleted_at = ?/* AND t2.status = ?*/
|
||||||
LEFT JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ? AND t3.status = ?
|
LEFT JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ?/* AND t3.status = ?*/
|
||||||
LEFT JOIN sku_category t4 ON t3.category_id = t4.id AND t4.deleted_at = ?
|
LEFT JOIN sku_category t4 ON t3.category_id = t4.id AND t4.deleted_at = ?
|
||||||
LEFT JOIN data_resource t11 ON t11.main_url = t3.img
|
LEFT JOIN data_resource t11 ON t11.main_url = t3.img
|
||||||
LEFT JOIN data_resource t12 ON t12.main_url = t3.img2
|
LEFT JOIN data_resource t12 ON t12.main_url = t3.img2
|
||||||
@@ -388,8 +391,8 @@ func newGetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty
|
|||||||
`
|
`
|
||||||
sqlParams := []interface{}{
|
sqlParams := []interface{}{
|
||||||
vendorID, utils.DefaultTimeValue,
|
vendorID, utils.DefaultTimeValue,
|
||||||
utils.DefaultTimeValue, model.SkuStatusNormal,
|
utils.DefaultTimeValue, // model.SkuStatusNormal,
|
||||||
utils.DefaultTimeValue, model.SkuStatusNormal,
|
utils.DefaultTimeValue, // model.SkuStatusNormal,
|
||||||
utils.DefaultTimeValue,
|
utils.DefaultTimeValue,
|
||||||
}
|
}
|
||||||
if isSingleStorePF {
|
if isSingleStorePF {
|
||||||
@@ -561,7 +564,7 @@ func newGetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSync
|
|||||||
t1.%s_sync_status sku_sync_status, t1.%s_price vendor_price, t1.%s_lock_time lock_time,
|
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,
|
||||||
t2.*, t2.id sku_id, t2m.vendor_thing_id vendor_sku_id,
|
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.ex_prefix, t3.ex_prefix_begin, t3.ex_prefix_end,
|
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,
|
||||||
IF(t11.%s <> '', t11.%s, t3.img) img,
|
IF(t11.%s <> '', t11.%s, t3.img) img,
|
||||||
IF(t12.%s <> '', t12.%s, t3.img2) img2,
|
IF(t12.%s <> '', t12.%s, t3.img2) img2,
|
||||||
t13.%s desc_img,
|
t13.%s desc_img,
|
||||||
@@ -569,7 +572,7 @@ func newGetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSync
|
|||||||
t4m.sync_status cat_sync_status, t4m.vendor_thing_id vendor_cat_id,
|
t4m.sync_status cat_sync_status, t4m.vendor_thing_id vendor_cat_id,
|
||||||
t5skum.sync_status sku_cat_sync_status, t5skum.vendor_thing_id sku_vendor_cat_id
|
t5skum.sync_status sku_cat_sync_status, t5skum.vendor_thing_id sku_vendor_cat_id
|
||||||
FROM sku t2
|
FROM sku t2
|
||||||
JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ? AND t3.status = ?
|
JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ?/* AND t3.status = ?*/
|
||||||
JOIN sku_category t4 ON t3.category_id = t4.id AND t4.deleted_at = ?
|
JOIN sku_category t4 ON t3.category_id = t4.id AND t4.deleted_at = ?
|
||||||
JOIN store_map sm ON sm.vendor_id = ? AND sm.store_id = ? AND sm.deleted_at = ?
|
JOIN store_map sm ON sm.vendor_id = ? AND sm.store_id = ? AND sm.deleted_at = ?
|
||||||
JOIN thing_map t2m ON t2m.thing_id = t2.id AND t2m.vendor_org_code = sm.vendor_org_code AND t2m.thing_type = ? AND t2m.vendor_id = ? AND t2m.deleted_at = ?
|
JOIN thing_map t2m ON t2m.thing_id = t2.id AND t2m.vendor_org_code = sm.vendor_org_code AND t2m.thing_type = ? AND t2m.vendor_id = ? AND t2m.deleted_at = ?
|
||||||
@@ -580,17 +583,17 @@ func newGetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSync
|
|||||||
LEFT JOIN data_resource t11 ON t11.main_url = t3.img
|
LEFT JOIN data_resource t11 ON t11.main_url = t3.img
|
||||||
LEFT JOIN data_resource t12 ON t12.main_url = t3.img2
|
LEFT JOIN data_resource t12 ON t12.main_url = t3.img2
|
||||||
LEFT JOIN data_resource t13 ON t13.main_url = t3.desc_img
|
LEFT JOIN data_resource t13 ON t13.main_url = t3.desc_img
|
||||||
WHERE t2.deleted_at = ? AND t2.status = ? AND t2m.vendor_thing_id <> ''
|
WHERE t2.deleted_at = ?/* AND t2.status = ?*/ AND t2m.vendor_thing_id <> ''
|
||||||
ORDER BY t1.price DESC`
|
ORDER BY t1.price DESC`
|
||||||
sqlParams := []interface{}{
|
sqlParams := []interface{}{
|
||||||
utils.DefaultTimeValue, model.SkuStatusNormal,
|
utils.DefaultTimeValue, // model.SkuStatusNormal,
|
||||||
utils.DefaultTimeValue,
|
utils.DefaultTimeValue,
|
||||||
vendorID, storeID, utils.DefaultTimeValue,
|
vendorID, storeID, utils.DefaultTimeValue,
|
||||||
model.ThingTypeSku, vendorID, utils.DefaultTimeValue,
|
model.ThingTypeSku, vendorID, utils.DefaultTimeValue,
|
||||||
model.ThingTypeCategory, vendorID, utils.DefaultTimeValue,
|
model.ThingTypeCategory, vendorID, utils.DefaultTimeValue,
|
||||||
utils.DefaultTimeValue,
|
utils.DefaultTimeValue,
|
||||||
model.ThingTypeCategory, vendorID, utils.DefaultTimeValue,
|
model.ThingTypeCategory, vendorID, utils.DefaultTimeValue,
|
||||||
utils.DefaultTimeValue, model.SkuStatusNormal,
|
utils.DefaultTimeValue, // model.SkuStatusNormal,
|
||||||
}
|
}
|
||||||
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
|
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
|
||||||
sql = fmt.Sprintf(sql,
|
sql = fmt.Sprintf(sql,
|
||||||
@@ -1185,7 +1188,7 @@ func GetTopSkusByStoreIDs(db *DaoDB, storeIDs []int) (storeSkuNameExt []*StoreSk
|
|||||||
t4.sub_store_id, t4.price bind_price, IF(t4.unit_price IS NOT NULL, t4.unit_price, t1.price) unit_price, t4.status store_sku_status, t4.auto_sale_at,
|
t4.sub_store_id, t4.price bind_price, IF(t4.unit_price IS NOT NULL, t4.unit_price, t1.price) unit_price, t4.status store_sku_status, t4.auto_sale_at,
|
||||||
t4.ebai_id, t4.mtwm_id,
|
t4.ebai_id, t4.mtwm_id,
|
||||||
t4.ebai_sync_status, t4.mtwm_sync_status,
|
t4.ebai_sync_status, t4.mtwm_sync_status,
|
||||||
t4.jd_price, t4.ebai_price, t4.mtwm_price, t4.jx_price
|
t4.jd_price, t4.ebai_price, t4.mtwm_price, t4.jx_price, a.spec_quality sku_spec_quality, a.spec_unit sku_spec_unit
|
||||||
FROM sku a
|
FROM sku a
|
||||||
JOIN sku_name t1 ON a.name_id = t1.id AND t1.deleted_at = ?
|
JOIN sku_name t1 ON a.name_id = t1.id AND t1.deleted_at = ?
|
||||||
JOIN store_sku_bind t4 ON t4.sku_id = a.id AND t4.deleted_at = ?
|
JOIN store_sku_bind t4 ON t4.sku_id = a.id AND t4.deleted_at = ?
|
||||||
@@ -1529,9 +1532,10 @@ func GetPriceReferPrice(db *DaoDB, cityCode int, skuID int, snapDate time.Time)
|
|||||||
return priceRefer, err
|
return priceRefer, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetStoreSkusAndSkuName(db *DaoDB, storeIDs, skuIDs, nameIDs []int) (storeSkuNameExt []*StoreSkuNameExt, err error) {
|
func GetStoreSkusAndSkuName(db *DaoDB, storeIDs, skuIDs, nameIDs []int) (storeSkuSyncInfo []*StoreSkuSyncInfo, err error) {
|
||||||
sql := `
|
sql := `
|
||||||
SELECT a.*,c.id
|
SELECT a.id bind_id, a.store_id, a.jd_sync_status, a.mtwm_sync_status, a.ebai_sync_status, a.unit_price,
|
||||||
|
c.id name_id, c.unit, b.*
|
||||||
FROM store_sku_bind a
|
FROM store_sku_bind a
|
||||||
JOIN sku b ON b.id = a.sku_id AND b.deleted_at = ?
|
JOIN sku b ON b.id = a.sku_id AND b.deleted_at = ?
|
||||||
JOIN sku_name c ON c.id = b.name_id AND c.deleted_at = ?
|
JOIN sku_name c ON c.id = b.name_id AND c.deleted_at = ?
|
||||||
@@ -1554,6 +1558,6 @@ func GetStoreSkusAndSkuName(db *DaoDB, storeIDs, skuIDs, nameIDs []int) (storeSk
|
|||||||
sql += " AND b.name_id IN (" + GenQuestionMarks(len(nameIDs)) + ")"
|
sql += " AND b.name_id IN (" + GenQuestionMarks(len(nameIDs)) + ")"
|
||||||
sqlParams = append(sqlParams, nameIDs)
|
sqlParams = append(sqlParams, nameIDs)
|
||||||
}
|
}
|
||||||
err = GetRows(db, &storeSkuNameExt, sql, sqlParams...)
|
err = GetRows(db, &storeSkuSyncInfo, sql, sqlParams...)
|
||||||
return storeSkuNameExt, err
|
return storeSkuSyncInfo, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ type OperateEventDetail struct {
|
|||||||
ThingType int `json:"thingType"` //各字段类型
|
ThingType int `json:"thingType"` //各字段类型
|
||||||
StoreID int `orm:"column(store_id)" json:"storeID"`
|
StoreID int `orm:"column(store_id)" json:"storeID"`
|
||||||
AccessUUID string `orm:"column(access_uuid)" json:"accessUUID"`
|
AccessUUID string `orm:"column(access_uuid)" json:"accessUUID"`
|
||||||
BeforeData string `orm:"size(32)" json:"beforeData"`
|
BeforeData string `orm:"size(255)" json:"beforeData"`
|
||||||
AfterData string `orm:"size(32)" json:"afterData"`
|
AfterData string `orm:"size(255)" json:"afterData"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *OperateEventDetail) TableIndex() [][]string {
|
func (v *OperateEventDetail) TableIndex() [][]string {
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ func (p *PurchaseHandler) GetWaybillStatusFromVendorStatus(vendorStatus string)
|
|||||||
func (c *PurchaseHandler) onWaybillMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaiapi.CallbackResponse) {
|
func (c *PurchaseHandler) onWaybillMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaiapi.CallbackResponse) {
|
||||||
order := c.callbackMsg2Waybill(msg)
|
order := c.callbackMsg2Waybill(msg)
|
||||||
globals.SugarLogger.Debugf("ebai onWaybillMsg orderID:%s", order.VendorOrderID)
|
globals.SugarLogger.Debugf("ebai onWaybillMsg orderID:%s", order.VendorOrderID)
|
||||||
if order.Status == model.WaybillStatusAccepted {
|
if order.Status == model.WaybillStatusNew || order.Status == model.WaybillStatusAccepted { // 饿百新运单事件要查询快递员信息,因为可能事件错序
|
||||||
if result, err := api.EbaiAPI.OrderDeliveryGet(order.VendorOrderID); err != nil {
|
if result, err := api.EbaiAPI.OrderDeliveryGet(order.VendorOrderID); err != nil {
|
||||||
globals.SugarLogger.Warnf("ebai onWaybillMsg orderID:%s OrderDeliveryGet failed with error:%v", order.VendorOrderID, err)
|
globals.SugarLogger.Warnf("ebai onWaybillMsg orderID:%s OrderDeliveryGet failed with error:%v", order.VendorOrderID, err)
|
||||||
return api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, order.VendorOrderID)
|
return api.EbaiAPI.Err2CallbackResponse(msg.Cmd, err, order.VendorOrderID)
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ func (c *Auth2Controller) SendVerifyCode() {
|
|||||||
|
|
||||||
// @Title 登录接口
|
// @Title 登录接口
|
||||||
// @Description 登录接口(微信与公众号登录不能直接调用此接口)
|
// @Description 登录接口(微信与公众号登录不能直接调用此接口)
|
||||||
// @Param authType formData string true "登录类型,当前支持[localpass:本地账号密码,mobile:手机短信,wxqrcode:微信登录,weixinsns:微信公众号,weixinmini;小程序,ddstaff:钉钉企业,ddqrcode:钉钉扫码]"
|
// @Param authType formData string true "登录类型,当前支持[localpass:本地账号密码,mobile:手机短信,wxqrcode:微信登录,weixinsns:微信公众号,weixinmini;小程序,ddstaff:钉钉企业,ddqrcode:钉钉扫码,alipaycode:支付宝小程序]"
|
||||||
// @Param authSecret formData string true "不同登录类型的登录秘密,如果是localpass登录类型,是md5后的值(空串不要md5)"
|
// @Param authSecret formData string true "不同登录类型的登录秘密,如果是localpass登录类型,是md5后的值(空串不要md5)"
|
||||||
// @Param authID formData string false "登录ID,登录类型为localpass时依赖于authIDType,其它为相应登录类型的id"
|
// @Param authID formData string false "登录ID,登录类型为localpass时依赖于authIDType,其它为相应登录类型的id"
|
||||||
// @Param authIDType formData string false "只有在登录类型为localpass时,才有意义,分别为:userid2:用户名,email,mobile"
|
// @Param authIDType formData string false "只有在登录类型为localpass时,才有意义,分别为:userid2:用户名,email,mobile"
|
||||||
|
|||||||
@@ -610,18 +610,19 @@ func (c *StoreSkuController) GetVendorStoreSkuPrice() {
|
|||||||
// @Title 根据skuID关注商品,价格为中位价,部分可售
|
// @Title 根据skuID关注商品,价格为中位价,部分可售
|
||||||
// @Description 根据skuID关注商品,价格为中位价,部分可售
|
// @Description 根据skuID关注商品,价格为中位价,部分可售
|
||||||
// @Param token header string true "认证token"
|
// @Param token header string true "认证token"
|
||||||
// @Param skuIDs formData string true "商品ID列表"
|
// @Param payload formData string true "json数据,StoreSkuBindInfo对象数组"
|
||||||
// @Param isAsync formData bool true "是否异步,缺省是同步"
|
// @Param isAsync formData bool true "是否异步,缺省是同步"
|
||||||
// @Param isContinueWhenError formData bool true "单个同步失败是否继续,缺省false"
|
// @Param isContinueWhenError formData bool true "单个同步失败是否继续,缺省false"
|
||||||
// @Success 200 {object} controllers.CallResult
|
// @Success 200 {object} controllers.CallResult
|
||||||
// @Failure 200 {object} controllers.CallResult
|
// @Failure 200 {object} controllers.CallResult
|
||||||
// @router /FocusStoreSkusBySku [post]
|
// @router /FocusStoreSkusBySku [post]
|
||||||
func (c *StoreSkuController) FocusStoreSkusBySku() {
|
func (c *StoreSkuController) FocusStoreSkusBySku() {
|
||||||
var skuIDList []int
|
var skuBindInfos []*cms.StoreSkuBindInfo
|
||||||
c.callFocusStoreSkusBySku(func(params *tStoreSkuFocusStoreSkusBySkuParams) (retVal interface{}, errCode string, err error) {
|
c.callFocusStoreSkusBySku(func(params *tStoreSkuFocusStoreSkusBySkuParams) (retVal interface{}, errCode string, err error) {
|
||||||
if jxutils.Strings2Objs(params.SkuIDs, &skuIDList); err == nil {
|
if err = jxutils.Strings2Objs(params.Payload, &skuBindInfos); err != nil {
|
||||||
retVal, err = cms.FocusStoreSkusBySku(params.Ctx, skuIDList, params.IsAsync, params.IsContinueWhenError)
|
return retVal, "", err
|
||||||
}
|
}
|
||||||
|
retVal, err = cms.FocusStoreSkusBySku(params.Ctx, skuBindInfos, params.IsAsync, params.IsContinueWhenError)
|
||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,6 +91,17 @@ func FilterMapByFieldList(mapData map[string]interface{}, fields []string) (vali
|
|||||||
return valid, invalid
|
return valid, invalid
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func FindMapAndStructMixed(mapData map[string]interface{}, obj interface{}) (valid map[string]interface{}) {
|
||||||
|
valid = make(map[string]interface{})
|
||||||
|
map2 := utils.Struct2FlatMap(obj)
|
||||||
|
for k, v := range map2 {
|
||||||
|
if mapData[k] != nil {
|
||||||
|
valid[k] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return valid
|
||||||
|
}
|
||||||
|
|
||||||
func IsValueEqual(value1, value2 interface{}) bool {
|
func IsValueEqual(value1, value2 interface{}) bool {
|
||||||
if value1 == nil || value2 == nil {
|
if value1 == nil || value2 == nil {
|
||||||
return value1 == value2
|
return value1 == value2
|
||||||
|
|||||||
Reference in New Issue
Block a user