diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 3c58e3350..fe533aa25 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -1,6 +1,7 @@ package cms import ( + "errors" "fmt" "strconv" "time" @@ -260,8 +261,51 @@ func UpdateStoresSkus(ctx *jxcontext.Context, storeIDs []int, skuBindInfos []*St return num, err } +func checkStoresSkusSaleCity(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs []int, skuBindInfos []*StoreSkuBindInfo) (err error) { + sql := ` + SELECT t1.id store_id, t2.id name_id, t2.name + FROM store t1 + JOIN sku_name t2 ON t2.is_global = 0 + LEFT JOIN sku_name_place_bind t3 ON t2.id = t3.name_id AND t1.city_code = t3.place_code + WHERE t3.id IS NULL + ` + sql += " AND t1.id IN (" + dao.GenQuestionMarks(len(storeIDs)) + ")" + nameIDs := make([]int, 0) + for _, v := range skuBindInfos { + if v.IsFocus == 1 { + nameIDs = append(nameIDs, v.NameID) + } else { + for _, v2 := range v.Skus { + if v2.IsSale == 1 { + nameIDs = append(nameIDs, v.NameID) + break + } + } + } + } + sql += " AND t2.id IN (" + dao.GenQuestionMarks(len(nameIDs)) + ")" + var invalidList []*struct { + StoreID int `orm:"column(store_id)"` + NameID int `orm:"column(name_id)"` + Name string + } + if err = dao.GetRows(db, &invalidList, sql, storeIDs, nameIDs); err == nil { + if len(invalidList) > 0 { + errMsg := "" + for _, v := range invalidList { + errMsg += fmt.Sprintf("门店:%d,Name:%d(%s)销售区域错误!\n", v.StoreID, v.NameID, v.Name) + } + err = errors.New(errMsg) + } + } + return err +} + func updateStoresSkusWithoutSync(ctx *jxcontext.Context, storeIDs []int, skuBindInfos []*StoreSkuBindInfo) (needSyncSkus []int, err error) { db := dao.GetDB() + if err = checkStoresSkusSaleCity(ctx, db, storeIDs, skuBindInfos); err != nil { + return nil, err + } userName := ctx.GetUserName() needSyncIDMap := make(map[int]int) dao.Begin(db)