sys_dict_data.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. /*
  2. * @desc:字典数据
  3. * @company:云南奇讯科技有限公司
  4. * @Author: yixiaohu<yxh669@qq.com>
  5. * @Date: 2022/3/18 11:55
  6. */
  7. package service
  8. import (
  9. "context"
  10. "github.com/gogf/gf/v2/frame/g"
  11. "github.com/gogf/gf/v2/text/gstr"
  12. "github.com/gogf/gf/v2/util/gconv"
  13. "github.com/tiger1103/gfast/v3/api/v1/system"
  14. "github.com/tiger1103/gfast/v3/internal/app/common/consts"
  15. "github.com/tiger1103/gfast/v3/internal/app/common/model"
  16. "github.com/tiger1103/gfast/v3/internal/app/common/service/internal/dao"
  17. "github.com/tiger1103/gfast/v3/internal/app/common/service/internal/do"
  18. systemConsts "github.com/tiger1103/gfast/v3/internal/app/system/consts"
  19. "github.com/tiger1103/gfast/v3/library/liberr"
  20. )
  21. type IDictData interface {
  22. GetDictWithDataByType(ctx context.Context, req *system.GetDictReq) (dict *system.GetDictRes, err error)
  23. List(ctx context.Context, req *system.DictDataSearchReq) (res *system.DictDataSearchRes, err error)
  24. Add(ctx context.Context, req *system.DictDataAddReq, userId uint64) (err error)
  25. Get(ctx context.Context, dictCode uint) (res *system.DictDataGetRes, err error)
  26. Edit(ctx context.Context, req *system.DictDataEditReq, userId uint64) (err error)
  27. Delete(ctx context.Context, ids []int) (err error)
  28. }
  29. type dictDataImpl struct {
  30. }
  31. var dictData = dictDataImpl{}
  32. func DictData() IDictData {
  33. return IDictData(&dictData)
  34. }
  35. // GetDictWithDataByType 通过字典键类型获取选项
  36. func (s dictDataImpl) GetDictWithDataByType(ctx context.Context, req *system.GetDictReq) (dict *system.GetDictRes,
  37. err error) {
  38. cache := Cache()
  39. cacheKey := consts.CacheSysDict + "_" + req.DictType
  40. //从缓存获取
  41. iDict := cache.GetOrSetFuncLock(ctx, cacheKey, func(ctx context.Context) (value interface{}, err error) {
  42. err = g.Try(func() {
  43. //从数据库获取
  44. dict = &system.GetDictRes{}
  45. //获取类型数据
  46. err = dao.SysDictType.Ctx(ctx).Where(dao.SysDictType.Columns().DictType, req.DictType).
  47. Where(dao.SysDictType.Columns().Status, 1).Fields(model.DictTypeRes{}).Scan(&dict.Info)
  48. liberr.ErrIsNil(ctx, err, "获取字典类型失败")
  49. err = dao.SysDictData.Ctx(ctx).Fields(model.DictDataRes{}).
  50. Where(dao.SysDictData.Columns().DictType, req.DictType).
  51. Order(dao.SysDictData.Columns().DictSort + " asc," +
  52. dao.SysDictData.Columns().DictCode + " asc").
  53. Scan(&dict.Values)
  54. liberr.ErrIsNil(ctx, err, "获取字典数据失败")
  55. })
  56. value = dict
  57. return
  58. }, 0, consts.CacheSysDictTag)
  59. if iDict != nil {
  60. err = gconv.Struct(iDict, &dict)
  61. if err != nil {
  62. return
  63. }
  64. }
  65. //设置给定的默认值
  66. for _, v := range dict.Values {
  67. if req.DefaultValue != "" {
  68. if gstr.Equal(req.DefaultValue, v.DictValue) {
  69. v.IsDefault = 1
  70. } else {
  71. v.IsDefault = 0
  72. }
  73. }
  74. }
  75. return
  76. }
  77. // List 获取字典数据
  78. func (s dictDataImpl) List(ctx context.Context, req *system.DictDataSearchReq) (res *system.DictDataSearchRes, err error) {
  79. res = new(system.DictDataSearchRes)
  80. err = g.Try(func() {
  81. m := dao.SysDictData.Ctx(ctx)
  82. if req != nil {
  83. if req.DictLabel != "" {
  84. m = m.Where(dao.SysDictData.Columns().DictLabel+" like ?", "%"+req.DictLabel+"%")
  85. }
  86. if req.Status != "" {
  87. m = m.Where(dao.SysDictData.Columns().Status+" = ", gconv.Int(req.Status))
  88. }
  89. if req.DictType != "" {
  90. m = m.Where(dao.SysDictData.Columns().DictType+" = ?", req.DictType)
  91. }
  92. res.Total, err = m.Count()
  93. liberr.ErrIsNil(ctx, err, "获取字典数据失败")
  94. if req.PageNum == 0 {
  95. req.PageNum = 1
  96. }
  97. res.CurrentPage = req.PageNum
  98. }
  99. if req.PageSize == 0 {
  100. req.PageSize = systemConsts.PageSize
  101. }
  102. err = m.Page(req.PageNum, req.PageSize).Order(dao.SysDictData.Columns().DictSort + " asc," +
  103. dao.SysDictData.Columns().DictCode + " asc").Scan(&res.List)
  104. liberr.ErrIsNil(ctx, err, "获取字典数据失败")
  105. })
  106. return
  107. }
  108. func (s *dictDataImpl) Add(ctx context.Context, req *system.DictDataAddReq, userId uint64) (err error) {
  109. err = g.Try(func() {
  110. _, err = dao.SysDictData.Ctx(ctx).Insert(do.SysDictData{
  111. DictSort: req.DictSort,
  112. DictLabel: req.DictLabel,
  113. DictValue: req.DictValue,
  114. DictType: req.DictType,
  115. CssClass: req.CssClass,
  116. ListClass: req.ListClass,
  117. IsDefault: req.IsDefault,
  118. Status: req.Status,
  119. CreateBy: userId,
  120. Remark: req.Remark,
  121. })
  122. liberr.ErrIsNil(ctx, err, "添加字典数据失败")
  123. //清除缓存
  124. Cache().RemoveByTag(ctx, consts.CacheSysDictTag)
  125. })
  126. return
  127. }
  128. // Get 获取字典数据
  129. func (s *dictDataImpl) Get(ctx context.Context, dictCode uint) (res *system.DictDataGetRes, err error) {
  130. res = new(system.DictDataGetRes)
  131. err = g.Try(func() {
  132. err = dao.SysDictData.Ctx(ctx).WherePri(dictCode).Scan(&res.Dict)
  133. liberr.ErrIsNil(ctx, err, "获取字典数据失败")
  134. })
  135. return
  136. }
  137. // Edit 修改字典数据
  138. func (s *dictDataImpl) Edit(ctx context.Context, req *system.DictDataEditReq, userId uint64) (err error) {
  139. err = g.Try(func() {
  140. _, err = dao.SysDictData.Ctx(ctx).WherePri(req.DictCode).Update(do.SysDictData{
  141. DictSort: req.DictSort,
  142. DictLabel: req.DictLabel,
  143. DictValue: req.DictValue,
  144. DictType: req.DictType,
  145. CssClass: req.CssClass,
  146. ListClass: req.ListClass,
  147. IsDefault: req.IsDefault,
  148. Status: req.Status,
  149. UpdateBy: userId,
  150. Remark: req.Remark,
  151. })
  152. liberr.ErrIsNil(ctx, err, "修改字典数据失败")
  153. //清除缓存
  154. Cache().RemoveByTag(ctx, consts.CacheSysDictTag)
  155. })
  156. return
  157. }
  158. // Delete 删除字典数据
  159. func (s *dictDataImpl) Delete(ctx context.Context, ids []int) (err error) {
  160. err = g.Try(func() {
  161. _, err = dao.SysDictData.Ctx(ctx).Where(dao.SysDictData.Columns().DictCode+" in(?)", ids).Delete()
  162. liberr.ErrIsNil(ctx, err, "删除字典数据失败")
  163. //清除缓存
  164. Cache().RemoveByTag(ctx, consts.CacheSysDictTag)
  165. })
  166. return
  167. }