Skip to content

Commit fd03e44

Browse files
author
piexlMax(奇淼
committed
refactor(字典详情): 优化字典详情查询逻辑,移除预加载改为按需加载
1 parent c546e6d commit fd03e44

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

server/service/system/sys_dictionary_detail.go

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ func (dictionaryDetailService *DictionaryDetailService) updateChildrenLevelAndPa
166166
//@return: sysDictionaryDetail system.SysDictionaryDetail, err error
167167

168168
func (dictionaryDetailService *DictionaryDetailService) GetSysDictionaryDetail(id uint) (sysDictionaryDetail system.SysDictionaryDetail, err error) {
169-
err = global.GVA_DB.Preload("Children").Where("id = ?", id).First(&sysDictionaryDetail).Error
169+
err = global.GVA_DB.Where("id = ?", id).First(&sysDictionaryDetail).Error
170170
return
171171
}
172172

@@ -205,14 +205,14 @@ func (dictionaryDetailService *DictionaryDetailService) GetSysDictionaryDetailIn
205205
if err != nil {
206206
return
207207
}
208-
err = db.Preload("Children").Limit(limit).Offset(offset).Order("sort").Find(&sysDictionaryDetails).Error
208+
err = db.Limit(limit).Offset(offset).Order("sort").Find(&sysDictionaryDetails).Error
209209
return sysDictionaryDetails, total, err
210210
}
211211

212212
// 按照字典id获取字典全部内容的方法
213213
func (dictionaryDetailService *DictionaryDetailService) GetDictionaryList(dictionaryID uint) (list []system.SysDictionaryDetail, err error) {
214214
var sysDictionaryDetails []system.SysDictionaryDetail
215-
err = global.GVA_DB.Preload("Children").Find(&sysDictionaryDetails, "sys_dictionary_id = ?", dictionaryID).Error
215+
err = global.GVA_DB.Find(&sysDictionaryDetails, "sys_dictionary_id = ?", dictionaryID).Error
216216
return sysDictionaryDetails, err
217217
}
218218

@@ -265,19 +265,29 @@ func (dictionaryDetailService *DictionaryDetailService) GetDictionaryDetailsByPa
265265
db = db.Where("parent_id IS NULL")
266266
}
267267

268+
err = db.Order("sort").Find(&list).Error
269+
if err != nil {
270+
return list, err
271+
}
272+
273+
// 如果需要包含子级数据,使用递归方式加载所有层级的子项
268274
if req.IncludeChildren {
269-
db = db.Preload("Children")
275+
for i := range list {
276+
err = dictionaryDetailService.loadChildren(&list[i])
277+
if err != nil {
278+
return list, err
279+
}
280+
}
270281
}
271282

272-
err = db.Order("sort").Find(&list).Error
273283
return list, err
274284
}
275285

276286
// 按照字典type获取字典全部内容的方法
277287
func (dictionaryDetailService *DictionaryDetailService) GetDictionaryListByType(t string) (list []system.SysDictionaryDetail, err error) {
278288
var sysDictionaryDetails []system.SysDictionaryDetail
279289
db := global.GVA_DB.Model(&system.SysDictionaryDetail{}).Joins("JOIN sys_dictionaries ON sys_dictionaries.id = sys_dictionary_details.sys_dictionary_id")
280-
err = db.Debug().Preload("Children").Find(&sysDictionaryDetails, "type = ?", t).Error
290+
err = db.Find(&sysDictionaryDetails, "type = ?", t).Error
281291
return sysDictionaryDetails, err
282292
}
283293

@@ -308,15 +318,15 @@ func (dictionaryDetailService *DictionaryDetailService) GetDictionaryTreeListByT
308318
// 按照字典id+字典内容value获取单条字典内容
309319
func (dictionaryDetailService *DictionaryDetailService) GetDictionaryInfoByValue(dictionaryID uint, value string) (detail system.SysDictionaryDetail, err error) {
310320
var sysDictionaryDetail system.SysDictionaryDetail
311-
err = global.GVA_DB.Preload("Children").First(&sysDictionaryDetail, "sys_dictionary_id = ? and value = ?", dictionaryID, value).Error
321+
err = global.GVA_DB.First(&sysDictionaryDetail, "sys_dictionary_id = ? and value = ?", dictionaryID, value).Error
312322
return sysDictionaryDetail, err
313323
}
314324

315325
// 按照字典type+字典内容value获取单条字典内容
316326
func (dictionaryDetailService *DictionaryDetailService) GetDictionaryInfoByTypeValue(t string, value string) (detail system.SysDictionaryDetail, err error) {
317327
var sysDictionaryDetails system.SysDictionaryDetail
318328
db := global.GVA_DB.Model(&system.SysDictionaryDetail{}).Joins("JOIN sys_dictionaries ON sys_dictionaries.id = sys_dictionary_details.sys_dictionary_id")
319-
err = db.Preload("Children").First(&sysDictionaryDetails, "sys_dictionaries.type = ? and sys_dictionary_details.value = ?", t, value).Error
329+
err = db.First(&sysDictionaryDetails, "sys_dictionaries.type = ? and sys_dictionary_details.value = ?", t, value).Error
320330
return sysDictionaryDetails, err
321331
}
322332

0 commit comments

Comments
 (0)