Merge remote-tracking branch 'origin/mark' into su

This commit is contained in:
苏尹岚
2020-01-10 16:11:32 +08:00
12 changed files with 286 additions and 195 deletions

View File

@@ -151,6 +151,8 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Ac
storeIDMap := make(map[int]int)
skuIDMap := make(map[int]int)
storeSkuParamMap := make(map[int][]*ActStoreSkuParam)
actStoreSkuMap := make(map[int64]bool)
var wrongSkuList []*ActStoreSkuParam
for _, v := range actStoreSku {
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
skuIDMap[v.SkuID] = 1
storeSkuParamMap[v.StoreID] = append(storeSkuParamMap[v.StoreID], v)
actStoreSkuMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] = true
}
}
if len(wrongSkuList) > 0 {
@@ -167,14 +171,22 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Ac
storeIDs := jxutils.IntMap2List(storeIDMap)
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)
if err != nil {
globals.SugarLogger.Errorf("GetEffectiveActStoreSkuInfo can not get sku promotion info for error:%v", err)
return nil, nil, nil, err
}
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) {
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) {
@@ -889,7 +905,7 @@ func RefreshPageActs(ctx *jxcontext.Context, vendorIDs []int, createdFrom time.T
return nil, err
}
// 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)
if err = err2; err != nil {
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) {
db := dao.GetDB()
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, skuID, 0,
utils.DefaultTimeValue, utils.DefaultTimeValue, time.Now().Add(-24*30*3*time.Hour), utils.DefaultTimeValue)
if err = err2; err != nil {
return "", err
}
for _, v := range pagedInfo.Data {
actMap[v.Act.ID] = &v.Act
}
pagedInfo, err2 := dao.QueryActs(db, 0, 0, -1, -1, "", vendorID, []int{model.ActStatusCreated}, actTypes, nil, 0, skuIDs, 0,
utils.DefaultTimeValue, utils.DefaultTimeValue, time.Now().Add(-24*30*3*time.Hour), utils.DefaultTimeValue)
if err = err2; err != nil {
return "", err
}
for _, v := range pagedInfo.Data {
actMap[v.Act.ID] = &v.Act
}
if len(actMap) == 0 {
return "", nil
}

View File

@@ -1090,21 +1090,23 @@ func refreshStoreSkuPrice(ctx *jxcontext.Context, db *dao.DaoDB, skuID int) (err
}
}
}()
for vendorID := range partner.PurchasePlatformHandlers {
storeSkuList, err := dao.GetStoreSkus2(db, vendorID, 0, []int{skuID}, false)
if err == nil {
for _, v := range storeSkuList {
v.Price = int64(jxutils.CaculateSkuPrice(int(v.UnitPrice), v.SpecQuality, v.SpecUnit, v.Unit))
storeSku := &model.StoreSkuBind{}
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
}
}
list, err := dao.GetStoreSkusAndSkuName(db, nil, []int{skuID}, nil)
for _, v := range list {
storeID := v.StoreID
storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDJX)
if err != nil {
return err
}
storeSku := &model.StoreSkuBind{}
storeSku.ID = v.BindID
storeSku.JdSyncStatus = v.JdSyncStatus | model.SyncFlagPriceMask
storeSku.MtwmSyncStatus = v.MtwmSyncStatus | model.SyncFlagPriceMask
storeSku.EbaiSyncStatus = v.EbaiSyncStatus | model.SyncFlagPriceMask
storeSku.Price = jxutils.CaculateSkuPrice(int(v.UnitPrice), v.SpecQuality, v.SpecUnit, v.Unit)
storeSku.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), int(storeSku.Price))
storeSku.LastOperator = ctx.GetUserName()
storeSku.UpdatedAt = time.Now()
dao.UpdateEntity(db, storeSku, "Price", "JdSyncStatus", "MtwmSyncStatus", "EbaiSyncStatus", "JxPrice")
}
dao.Commit(db)
return err

View File

@@ -13,6 +13,8 @@ import (
"time"
"unicode"
"git.rosy.net.cn/jx-callback/business/jxstore/event"
"git.rosy.net.cn/baseapi"
"git.rosy.net.cn/jx-callback/business/jxutils/excel"
@@ -828,6 +830,10 @@ func UpdateStoresSkusByBind(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBind
}
}()
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)
if err = err2; err != nil {
dao.Rollback(db)
@@ -1035,6 +1041,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
if tmpStatus := getSkuSaleStatus(inSkuBind, skuBindInfo); tmpStatus != model.StoreSkuBindStatusNA {
skuBind.Status = tmpStatus
}
// err = AddEventDetail(model.OperateAdd, v.RealSkuID, model.ThingTypeSku, storeID, ctx.GetTrackInfo(), "", "")
setStoreSkuBindStatus(skuBind, model.SyncFlagNewMask)
dao.WrapAddIDCULDEntity(skuBind, userName)
// globals.SugarLogger.Debug(utils.Format4Output(skuBind, false))
@@ -1059,8 +1066,8 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
}
} else {
skuBind = &v.StoreSkuBind
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{}{
model.FieldStatus: model.StoreSkuBindStatusDeleted,
model.FieldJdSyncStatus: model.SyncFlagDeletedMask,
@@ -1072,7 +1079,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
}
} else {
// 用了SELECT FOR UPDATE后只更新修改字段是没有必要的暂时保留
updateFieldMap := make(map[string]int)
updateFieldMap := make(map[string]interface{})
if skuBindInfo.IsFocus == 1 { // 关注之后再关注不操作
// skuBind.Status = model.StoreSkuBindStatusDontSale // 缺省不可售?
// skuBind.DeletedAt = utils.DefaultTimeValue
@@ -1089,33 +1096,36 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
setStoreSkuBindStatus(skuBind, model.SyncFlagSaleMask)
updateFieldMap[model.FieldStatus] = 1
}
if skuBindInfo.UnitPrice != 0 && skuBind.UnitPrice != unitPrice && isCanChangePrice { // 这里是否需要加此条件限制
skuBind.UnitPrice = unitPrice
skuBind.Price = jxutils.CaculateSkuPrice(unitPrice, v.SpecQuality, v.SpecUnit, v.SkuNameUnit)
skuBind.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), skuBind.Price)
setStoreSkuBindStatus(skuBind, model.SyncFlagPriceMask)
updateFieldMap["UnitPrice"] = 1
updateFieldMap["Price"] = 1
updateFieldMap["JxPrice"] = 1
if skuBindInfo.UnitPrice != 0 && isCanChangePrice { // 这里是否需要加此条件限制
price := jxutils.CaculateSkuPrice(unitPrice, v.SpecQuality, v.SpecUnit, v.SkuNameUnit)
jxPrice := jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), price)
if unitPrice != skuBind.UnitPrice || price != skuBind.Price || jxPrice != skuBind.JxPrice {
if price != skuBind.Price {
setStoreSkuBindStatus(skuBind, model.SyncFlagPriceMask)
updateFieldMap["Price"] = 1
}
skuBind.UnitPrice = unitPrice
skuBind.Price = price
skuBind.JxPrice = jxPrice
updateFieldMap["UnitPrice"] = 1
updateFieldMap["JxPrice"] = 1
}
}
if skuBindInfo.StatusSaleBegin != 0 && skuBindInfo.StatusSaleEnd != 0 {
if err := ValidateStruct(skuBindInfo); err != nil {
dao.Rollback(db)
return nil, fmt.Errorf("更改商品:%s, 可售时间不合法!时间范围:[%v] 至 [%v]", allBinds[0].Name, skuBindInfo.StatusSaleBegin, skuBindInfo.StatusSaleEnd)
globals.SugarLogger.Infof("更改商品:%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 inSkuBind != nil && inSkuBind.EbaiID != 0 {
// skuBind.EbaiID = inSkuBind.EbaiID
// updateFieldMap["EbaiID"] = 1
// }
// if inSkuBind != nil && inSkuBind.ElmID != 0 {
// skuBind.ElmID = inSkuBind.ElmID
// updateFieldMap["ElmID"] = 1
// if updateFieldMap != nil {
// afterData := utils.MustMarshal(updateFieldMap)
// mapresult := refutil.FindMapAndStructMixed(updateFieldMap, skuBind)
// beforeData := utils.MustMarshal(mapresult)
// AddEventDetail(model.OperateUpdate, v.RealSkuID, model.ThingTypeSku, storeID, ctx.GetTrackInfo(), string(beforeData), string(afterData))
// }
if len(updateFieldMap) > 0 {
updateFieldMap[model.FieldJdSyncStatus] = 1
@@ -1124,9 +1134,11 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
updateFieldMap[model.FieldUpdatedAt] = 1
updateFieldMap[model.FieldLastOperator] = 1
// setStoreSkuBindStatus(skuBind, model.SyncFlagModifiedMask)
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 {
dao.Rollback(db)
return nil, err
@@ -1166,6 +1178,20 @@ func getSkuSaleStatus(inSkuBind *StoreSkuBindSkuInfo, skuNameBindInfo *StoreSkuB
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) {
if utils.IsTimeZero(autoSaleTime) {
outAutoSaleTime = utils.DefaultTimeValue
@@ -2921,60 +2947,153 @@ func GetCellForFocusStoreSkus(db *dao.DaoDB, rowNum int, row []string, sheetPara
skuMap[skuID] = price
}
func FocusStoreSkusBySku(ctx *jxcontext.Context, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
var (
skuNameMap = make(map[int][]*StoreSkuBindSkuInfo)
storeIDs []int
result1 []interface{}
)
func FocusStoreSkusBySku(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBindInfo, isAsync, isContinueWhenError bool) (hint string, err error) {
var result1 []interface{}
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, "")
taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
switch step {
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) {
store := batchItemList[0].(*model.Store)
for k, v := range skuNameMap {
var price int
focusList, _ := dao.GetStoreSkuBindByNameID(db, store.ID, k, model.StoreSkuBindStatusNormal)
//有关注过
if len(focusList) > 0 {
price = focusList[0].UnitPrice
} else {
var payPercentage int
if store.PayPercentage < 50 {
payPercentage = 70
} else {
payPercentage = store.PayPercentage
}
priceReferList, _ := dao.GetPriceReferSnapshotNoPage(db, []int{store.CityCode}, nil, []int{k}, utils.Time2Date(time.Now().AddDate(0, 0, -1)))
if len(priceReferList) > 0 {
price = priceReferList[0].MidUnitPrice * payPercentage / 100
v := batchItemList[0].(*model.Store)
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 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
}
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()
result1, _ = taskParallel.GetResult(0)
case 2:
@@ -2986,7 +3105,7 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuIDs []int, isAsync, isContin
}
return result, err
}
taskSeq := tasksch.NewSeqTask2("根据skuID批量部分关注商品", ctx, isContinueWhenError, taskSeqFunc, 3)
taskSeq := tasksch.NewSeqTask2("自动关注畅销品", ctx, isContinueWhenError, taskSeqFunc, 3)
tasksch.HandleTask(taskSeq, nil, true).Run()
if !isAsync {
_, err = taskSeq.GetResult(0)
@@ -2997,69 +3116,6 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuIDs []int, isAsync, isContin
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) {
var (
nameMap = make(map[int]*StoreSkuBindInfo)
@@ -3075,8 +3131,8 @@ func AutoFocusStoreSkusWithoutFocus(ctx *jxcontext.Context, skuIDs []int, isSync
})
} else {
skuBindInfo := &StoreSkuBindInfo{
UnitPrice: vv.UnitPrice,
NameID: vv.ID,
UnitPrice: int(vv.UnitPrice),
NameID: vv.NameID,
StoreID: v.ID,
Skus: []*StoreSkuBindSkuInfo{},
}
@@ -3127,6 +3183,6 @@ func UpdateStoreSkuNamePrice(ctx *jxcontext.Context, storeID, nameID, unitPrice
// for _, v := range skuList {
// 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
}

View File

@@ -209,7 +209,9 @@ func FullSyncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo
}
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) {
@@ -253,7 +255,7 @@ func formalizeStoreSkuList(inSkuList []*dao.StoreSkuSyncInfo) []*dao.StoreSkuSyn
if skuItem.VendorPrice > skuItem.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)
}
}