goods.go 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package goods
  2. import (
  3. "errors"
  4. "spaceofcheng/services/models"
  5. "spaceofcheng/services/models/cases"
  6. "spaceofcheng/services/models/coupon"
  7. "spaceofcheng/services/models/customer"
  8. "spaceofcheng/services/models/goods"
  9. "spaceofcheng/services/models/model"
  10. "spaceofcheng/services/models/system"
  11. "spaceofcheng/services/models/vipcard"
  12. "spaceofcheng/services/utils"
  13. "strings"
  14. )
  15. // GoodsServ 系统处理
  16. type GoodsServ struct {
  17. ctx *utils.Context
  18. dao *goods.GoodsDAO
  19. caseDAO *cases.CaseDAO
  20. custDAO *customer.CustomerDAO
  21. userDAO *system.UserDAO
  22. couponDAO *coupon.CouponDAO
  23. vipDAO *vipcard.VipcardDAO
  24. }
  25. // NewGoodsServ 初始化
  26. func NewGoodsServ(ctx *utils.Context) *GoodsServ {
  27. return &GoodsServ{
  28. ctx: ctx,
  29. dao: goods.NewGoodsDAO(ctx),
  30. caseDAO: cases.NewCaseDAO(ctx),
  31. custDAO: customer.NewCustomerDAO(ctx),
  32. userDAO: system.NewUserDAO(ctx),
  33. couponDAO: coupon.NewCouponDAO(ctx),
  34. vipDAO: vipcard.NewVipcardDAO(ctx),
  35. }
  36. }
  37. // GetListByCase 获取商品列表
  38. // 微信端
  39. func (s *GoodsServ) GetListByCase(id string) ([]goods.GoodsWithSpec, error) {
  40. res, err := s.dao.GetGoodsListOfCase(id)
  41. if err != nil {
  42. utils.LogError("获取商品列表失败: " + err.Error())
  43. return nil, errors.New("获取列表失败, 请重试")
  44. }
  45. return res, nil
  46. }
  47. // GetGoodsListPageNavi 获取商品列表
  48. // 前端 - 非统计部分
  49. func (s *GoodsServ) GetGoodsListPageNavi(name, typeID, caseids string, page, pagesize int) ([]goods.GoodsWithSpec, int64, error) {
  50. if page < 1 {
  51. page = 1
  52. }
  53. if pagesize < 0 {
  54. pagesize = 0
  55. }
  56. offset := (page - 1) * pagesize
  57. res, cnt, err := s.dao.GetGoodsListPageNavi(strings.ToLower(name), typeID, caseids, []int{pagesize, offset})
  58. if err != nil {
  59. utils.LogError("获取商品列表失败: " + err.Error())
  60. return nil, 0, errors.New("获取列表失败, 请重试")
  61. }
  62. return res, cnt, nil
  63. }
  64. // GetGoodsByID 根据id获取商品信息
  65. func (s *GoodsServ) GetGoodsByID(id string) (*goods.GoodsWithSpec, error) {
  66. goods, err := s.dao.GetGoodsWithSpecByID(id)
  67. return goods, err
  68. }
  69. // UpdateGoods 更新商品
  70. // 如果没有则新增
  71. func (s *GoodsServ) UpdateGoods(goods *model.TaGoods, images []string, specs []goods.SpecWithPrice) error {
  72. if err := utils.NewAuthEngine(s.ctx).CheckCase(goods.CaseId); err != nil {
  73. return err
  74. }
  75. if goods.GoodsId == "" {
  76. if err := s.dao.SaveGoods(goods, images, specs); err != nil {
  77. utils.LogError("保存商品失败: " + err.Error())
  78. return errors.New("保存商品失败, 请重试")
  79. }
  80. } else {
  81. if err := s.dao.UpdateGoods(goods, images, specs); err != nil {
  82. utils.LogError("更新商品失败: " + err.Error())
  83. return errors.New("更新商品失败, 请重试")
  84. }
  85. }
  86. return nil
  87. }
  88. // DeleteGoods 删除商品
  89. func (s *GoodsServ) DeleteGoods(id string) error {
  90. goods, err := s.dao.GetGoodsByID(id)
  91. if err != nil {
  92. utils.LogError("查询商品失败: " + err.Error())
  93. return errors.New("校验商品失败")
  94. }
  95. if goods.Status == models.STATUS_DEL {
  96. return nil
  97. }
  98. if err := utils.NewAuthEngine(s.ctx).CheckCase(goods.CaseId); err != nil {
  99. return err
  100. }
  101. if err := s.dao.DeleteGoods(id); err != nil {
  102. utils.LogError("删除商品失败: " + err.Error())
  103. return errors.New("删除商品失败")
  104. }
  105. return nil
  106. }