diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index f51f7250a..bf527b365 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -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 +} diff --git a/business/model/dao/sku.go b/business/model/dao/sku.go index ebb55016d..098b3192d 100644 --- a/business/model/dao/sku.go +++ b/business/model/dao/sku.go @@ -441,3 +441,39 @@ func GetSkuVendorCategoryMaps(db *DaoDB, nameIDs, vendorIDs []int, vendorCategor } return nil, err } + +func GetVendorCategoryMap(db *DaoDB, parentID, level, vendorID int, vendorOrgCode string, categoryID int) (vendorMaps []*model.VendorCategoryMap, err error) { + sql := ` + SELECT a.* + FROM vendor_category_map a + WHERE a.deleted_at = ? + ` + sqlParams := []interface{}{ + utils.DefaultTimeValue, + } + if parentID >= 0 { + sql += " AND a.parent_id = ?" + sqlParams = append(sqlParams, parentID) + } + if level > 0 { + sql += " AND a.level = ?" + sqlParams = append(sqlParams, level) + } + if vendorID != -1 { + sql += " AND a.vendor_id = ?" + sqlParams = append(sqlParams, vendorID) + } + if vendorOrgCode != "" { + sql += " AND a.vendor_org_code = ?" + sqlParams = append(sqlParams, vendorOrgCode) + } + if categoryID > 0 { + sql += " AND a.categoryID = ?" + sqlParams = append(sqlParams, categoryID) + } + err = GetRows(db, &vendorMaps, sql, sqlParams) + if err != nil { + return nil, err + } + return vendorMaps, err +} diff --git a/business/model/sku.go b/business/model/sku.go index ab6f39294..36e0cea4d 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -330,6 +330,8 @@ func (*SkuVendorCategoryMap) TableIndex() [][]string { type VendorCategoryMap struct { ModelIDCULD + + VendorID int `orm:"column(vendor_id)" json:"vendorID"` VendorOrgCode string `json:"vendorOrgCode"` CategoryID int `orm:"column(category_id)" json:"categoryID"` // 这个是指对应的sku_category VendorCategoryName string `orm:"size(255)" json:"vendorCategoryName"` // 平台类别单独的名字 @@ -340,6 +342,6 @@ type VendorCategoryMap struct { func (*VendorCategoryMap) TableUnique() [][]string { return [][]string{ - []string{"VendorOrgCode", "CategoryID", "DeletedAt"}, + []string{"VendorID", "VendorOrgCode", "CategoryID", "DeletedAt"}, } } diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index b988021c8..ebd662709 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -588,6 +588,16 @@ func (c *SkuController) GetVendorCategoryMap() { // @router /AddVendorCategoryMap [post] func (c *SkuController) AddVendorCategoryMap() { c.callAddVendorCategoryMap(func(params *tSkuAddVendorCategoryMapParams) (retVal interface{}, errCode string, err error) { + vendorCategoryMap := &model.VendorCategoryMap{ + VendorID: params.VendorID, + VendorOrgCode: params.VendorOrgCode, + CategoryID: params.CategroyID, + VendorCategoryName: params.VendorCategroyName, + VendorCategorySeq: params.VendorCategroySeq, + Level: params.Level, + ParentID: params.ParentID, + } + retVal, err = cms.AddVendorCategoryMap(params.Ctx, vendorCategoryMap) return retVal, "", err }) } @@ -606,6 +616,13 @@ func (c *SkuController) AddVendorCategoryMap() { // @router /UpdateVendorCategoryMap [put] func (c *SkuController) UpdateVendorCategoryMap() { c.callUpdateVendorCategoryMap(func(params *tSkuUpdateVendorCategoryMapParams) (retVal interface{}, errCode string, err error) { + vendorCategoryMap := &model.VendorCategoryMap{ + CategoryID: params.CategoryID, + VendorCategoryName: params.VendorCategroyName, + Level: params.Level, + ParentID: params.ParentID, + } + retVal, err = cms.UpdateVendorCategoryMap(params.Ctx, params.ID, vendorCategoryMap, params.IsDelete) return retVal, "", err }) } @@ -622,6 +639,10 @@ func (c *SkuController) UpdateVendorCategoryMap() { // @router /ReorderVendorCategories [put] func (c *SkuController) ReorderVendorCategories() { c.callReorderVendorCategories(func(params *tSkuReorderVendorCategoriesParams) (retVal interface{}, errCode string, err error) { + var idList []int + if err = utils.UnmarshalUseNumber([]byte(params.CategoryIDs), &idList); err == nil { + err = cms.ReorderVendorCategories(params.Ctx, params.CategoryID, params.VendorID, params.VendorOrgCode, idList) + } return retVal, "", err }) }