type.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package item
  2. import (
  3. "errors"
  4. "zhiyuan/models"
  5. "zhiyuan/pkg/app"
  6. "zhiyuan/pkg/db"
  7. "zhiyuan/pkg/redis"
  8. "zhiyuan/pkg/utils"
  9. "zhiyuan/services/form"
  10. )
  11. var MatItemType models.MatItemType
  12. const cacheKey = "material_item_type_cache"
  13. func GetTypeList(where map[string]interface{}, fields []string, page app.Page, retVal interface{}) ([]*models.MatItemType, error) {
  14. if page.PageNum > 0 && page.PageSize > 0 {
  15. where["_limit"] = db.GetOffset(uint(page.PageNum), uint(page.PageSize))
  16. }
  17. return MatItemType.GetMulti(where, fields, retVal)
  18. }
  19. func GetTypeListByCache() ([]*models.MatItemType, error) {
  20. res, err := redis.Get(cacheKey)
  21. var typeList []*models.MatItemType
  22. if err != nil {
  23. typeList, err = GetTypeList(nil, nil, app.Page{}, nil)
  24. if err != nil {
  25. return nil, err
  26. }
  27. redis.Set(cacheKey, typeList, 3600)
  28. } else {
  29. utils.JsonDecode(res).To(&typeList)
  30. }
  31. return typeList, nil
  32. }
  33. func GetTypeMapByCache() map[int]string {
  34. orderTypeMap := make(map[int]string)
  35. if orderTypeList, err := GetTypeListByCache(); err == nil {
  36. for _, v := range orderTypeList {
  37. orderTypeMap[v.ID] = v.TypeName
  38. }
  39. }
  40. return orderTypeMap
  41. }
  42. func CountType(where map[string]interface{}) (int64, error) {
  43. return db.Count(MatItemType.TableName(), where)
  44. }
  45. func GetTypeOne(where map[string]interface{}, fields []string, dest interface{}) (*models.MatItemType, error) {
  46. return MatItemType.GetOne(where, fields, dest)
  47. }
  48. func AddType(form form.MaterialItemTypeAdd) (int64, error) {
  49. typeMap := map[string]interface{}{
  50. "type_name": form.TypeName,
  51. "pid": form.PID,
  52. "category": form.Category,
  53. }
  54. typeID, err := db.InsertOne(MatItemType.TableName(), typeMap)
  55. redis.Del(cacheKey)
  56. if err != nil {
  57. return 0, nil
  58. }
  59. return typeID, nil
  60. }
  61. func EditType(form form.MaterialItemTypeAdd, id int) (int64, error) {
  62. typeInfo, _ := GetTypeOne(map[string]interface{}{"id": id}, nil, nil)
  63. if typeInfo.TypeName != form.TypeName && CheckDuplicate(form.TypeName) {
  64. return 0, errors.New("类别已存在")
  65. }
  66. typeMap := map[string]interface{}{
  67. "type_name": form.TypeName,
  68. "pid": form.PID,
  69. "category": form.Category,
  70. }
  71. redis.Del(cacheKey)
  72. return db.Update(MatItemType.TableName(), map[string]interface{}{"id": id}, typeMap)
  73. }
  74. func CheckDuplicate(name string) bool {
  75. typeInfo, err := GetTypeOne(map[string]interface{}{"type_name": name}, nil, nil)
  76. return typeInfo != nil && err == nil
  77. }