This commit is contained in:
苏尹岚
2021-01-26 14:18:19 +08:00
parent 799bcb0aa3
commit 52846991ba
4 changed files with 218 additions and 1 deletions

View File

@@ -2740,3 +2740,161 @@ func UpdateSkuExinfoMap(ctx *jxcontext.Context, nameIDs []int, imgWaterMark stri
}
return hint, err
}
func GetVendorCategoryMap(ctx *jxcontext.Context, parentID, level, vendorID int, vendorOrgCode string) (vendorMaps []*model.VendorCategoryMap, err error) {
db := dao.GetDB()
vendorMaps, err = dao.GetVendorCategoryMap(db, parentID, level, vendorID, vendorOrgCode, 0)
if err != nil {
return nil, err
}
return vendorMaps, err
}
func AddVendorCategoryMap(ctx *jxcontext.Context, vendorCategoryMap *model.VendorCategoryMap) (result *model.VendorCategoryMap, err error) {
var (
db = dao.GetDB()
)
if vendorCategoryMap.Level != 1 {
storeCatMaps, _ := dao.GetVendorCategoryMap(db, -1, 0, vendorCategoryMap.VendorID, vendorCategoryMap.VendorOrgCode, vendorCategoryMap.CategoryID)
if len(storeCatMaps) > 0 {
return nil, fmt.Errorf("已存在绑定的京西分类,分类名:[%v]", storeCatMaps[0].VendorCategoryName)
}
}
vendorCategoryMap.VendorCategoryName = strings.Trim(vendorCategoryMap.VendorCategoryName, " ")
dao.WrapAddIDCULDEntity(vendorCategoryMap, ctx.GetUserName())
dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db)
panic(r)
}
}()
if err = dao.CreateEntity(db, vendorCategoryMap); err != nil {
dao.Rollback(db)
return nil, err
}
dao.Commit(db)
result = vendorCategoryMap
if vendorCategoryMap.CategoryID != 0 {
_, err = CurVendorSync.SyncCategory(ctx, nil, vendorCategoryMap.CategoryID, false, ctx.GetUserName())
}
return result, err
}
func UpdateVendorCategoryMap(ctx *jxcontext.Context, ID int, vendorCategoryMap *model.VendorCategoryMap, isDelete bool) (num int64, err error) {
var (
db = dao.GetDB()
valid = make(map[string]interface{})
vendorCategoryMap2 = &model.VendorCategoryMap{}
vendorCategoryID int
)
vendorCategoryMap2.ID = ID
if err = dao.GetEntity(db, vendorCategoryMap2); err != nil {
return 0, err
}
if vendorCategoryMap.VendorCategoryName != "" {
valid["vendorCategoryName"] = vendorCategoryMap.VendorCategoryName
}
if vendorCategoryMap.CategoryID != 0 {
valid["categoryID"] = vendorCategoryMap.CategoryID
if !isDelete {
storeCatMaps, _ := dao.GetVendorCategoryMap(db, -1, 0, vendorCategoryMap2.VendorID, vendorCategoryMap2.VendorOrgCode, vendorCategoryMap.CategoryID)
if len(storeCatMaps) > 0 {
for _, v := range storeCatMaps {
if v.ID != ID {
return 0, fmt.Errorf("已存在绑定的京西分类,分类名:[%v]", storeCatMaps[0].VendorCategoryName)
}
}
}
}
vendorCategoryID = vendorCategoryMap.CategoryID
} else {
vendorCategoryID = vendorCategoryMap2.CategoryID
}
if vendorCategoryMap.Level != 0 {
valid["level"] = vendorCategoryMap.Level
if vendorCategoryMap.Level == 2 {
cat2, _ := dao.GetCategories(db, -1, 0, []int{vendorCategoryMap.CategoryID}, false)
if len(cat2) > 0 {
if cat2[0].ParentID != vendorCategoryMap.ParentID {
return 0, fmt.Errorf("此二级分类只能绑定到对应一级分类下!")
}
}
}
}
if isDelete {
valid["deletedAt"] = time.Now()
valid["updatedAt"] = time.Now()
valid["lastOperator"] = ctx.GetUserName()
//如果是1级分类则删除下面的子分类
var catIDs []int
if vendorCategoryMap2.Level == 1 {
storeCatMaps, _ := dao.GetVendorCategoryMap(db, vendorCategoryMap2.CategoryID, 2, vendorCategoryMap2.VendorID, vendorCategoryMap2.VendorOrgCode, 0)
if len(storeCatMaps) > 0 {
for _, v := range storeCatMaps {
catIDs = append(catIDs, v.CategoryID)
v.DeletedAt = time.Now()
v.LastOperator = ctx.GetUserName()
dao.UpdateEntity(db, v, "DeletedAt", "LastOperator")
}
}
}
}
dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db)
panic(r)
}
}()
if num, err = dao.UpdateEntityLogically(db, vendorCategoryMap2, valid, ctx.GetUserName(), nil); err != nil {
dao.Rollback(db)
return 0, err
}
if err = OnUpdateThing(ctx, db, nil, int64(vendorCategoryID), model.ThingTypeCategory); err != nil {
dao.Rollback(db)
return 0, err
}
dao.Commit(db)
_, err = CurVendorSync.SyncCategory(ctx, nil, vendorCategoryID, false, ctx.GetUserName())
return num, err
}
func ReorderVendorCategories(ctx *jxcontext.Context, parentID, vendorID int, vendorOrgCode string, categoryIDs []int) (err error) {
var (
vendorCatsMap []*model.VendorCategoryMap
)
db := dao.GetDB()
vendorCatsMap, err = dao.GetVendorCategoryMap(db, parentID, 0, vendorID, vendorOrgCode, 0)
catsLen := len(vendorCatsMap)
if catsLen != len(categoryIDs) {
return ErrInputCatsDoesntMatch
}
catsMap := make(map[int]*model.VendorCategoryMap, catsLen)
for _, cat := range vendorCatsMap {
catsMap[cat.CategoryID] = cat
}
dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db)
panic(r)
}
}()
for k, v := range categoryIDs {
if catsMap[v] == nil {
dao.Rollback(db)
return fmt.Errorf("分类:%d不在%d分类下", v, parentID)
}
catsMap[v].VendorCategorySeq = k
catsMap[v].LastOperator = ctx.GetUserName()
if _, err = dao.UpdateEntity(db, catsMap[v]); err != nil {
dao.Rollback(db)
return err
}
}
dao.Commit(db)
_, err = SyncCategories(ctx, nil, []int{model.VendorIDJD}, []string{vendorOrgCode}, categoryIDs, true)
return err
}