base_product.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package base
  2. import (
  3. "context"
  4. "fmt"
  5. "dashoo.cn/opms_libary/myerrors"
  6. "github.com/gogf/gf/frame/g"
  7. "github.com/gogf/gf/util/gconv"
  8. "dashoo.cn/micro/app/dao/base"
  9. model "dashoo.cn/micro/app/model/base"
  10. "dashoo.cn/micro/app/service"
  11. )
  12. type productService struct {
  13. *service.ContextService
  14. Dao *base.BaseProductDao
  15. }
  16. func NewProductService(ctx context.Context) (svc *productService, err error) {
  17. svc = new(productService)
  18. if svc.ContextService, err = svc.Init(ctx); err != nil {
  19. return nil, err
  20. }
  21. svc.Dao = base.NewBaseProductDao(svc.Tenant)
  22. return svc, nil
  23. }
  24. // GetList 产品信息列表
  25. func (s *productService) GetList(req *model.ProductSearchReq) (total int, productList []*model.BaseProduct, err error) {
  26. Dao := &s.Dao.BaseProductDao
  27. if req.ProdCode != "" {
  28. Dao = Dao.Where("prod_code = ?", req.ProdCode)
  29. }
  30. if req.ProdName != "" {
  31. Dao = Dao.Where("prod_name like ?", "%"+req.ProdName+"%")
  32. }
  33. if req.ProdClass != "" {
  34. Dao = Dao.Where("prod_class = ?", req.ProdClass)
  35. }
  36. if req.OnlyHardware {
  37. Dao = Dao.Where("prod_class in (40,50,60,90)")
  38. }
  39. if req.OnlySoftware {
  40. Dao = Dao.Where("prod_class in (10,20,30)")
  41. }
  42. if req.StateType == "启用" {
  43. Dao = Dao.Where("state IS NULL OR state<>'20'")
  44. } else if req.StateType == "禁用" {
  45. Dao = Dao.Where("state='20'")
  46. }
  47. total, err = Dao.Count()
  48. if err != nil {
  49. g.Log().Error(err)
  50. err = myerrors.DbError("获取总行数失败。")
  51. return
  52. }
  53. if req.PageNum != 0 && req.PageSize != 0 {
  54. Dao = Dao.Page(req.GetPage())
  55. }
  56. err = Dao.Order("id asc").Scan(&productList)
  57. return
  58. }
  59. // GetEntityById 根据ID查询详细信息
  60. func (s *productService) GetEntityById(id int64) (product *model.BaseProduct, err error) {
  61. product, err = s.Dao.FindOne(id)
  62. if err != nil {
  63. g.Log().Error(err)
  64. return
  65. }
  66. return
  67. }
  68. // Create 添加信息
  69. func (s *productService) Create(req *model.AddProductReq) (lastInsertId int64, err error) {
  70. product := new(model.BaseProduct)
  71. if err = gconv.Struct(req, product); err != nil {
  72. g.Log().Error(err)
  73. return
  74. }
  75. product.State = "10"
  76. service.SetCreatedInfo(product, s.GetCxtUserId(), s.GetCxtUserName())
  77. lastInsertId, err = s.Dao.InsertAndGetId(product)
  78. if err != nil {
  79. g.Log().Error(err)
  80. return
  81. }
  82. return
  83. }
  84. // UpdateById 修改数据
  85. func (s *productService) UpdateById(req *model.UpdateProductReq) (err error) {
  86. product, err := s.Dao.FindOne(req.Id)
  87. if err != nil {
  88. g.Log().Error(err)
  89. return err
  90. }
  91. if product == nil {
  92. return myerrors.TipsError("产品信息不存在或已被删除")
  93. }
  94. if err = gconv.Struct(req, product); err != nil {
  95. return
  96. }
  97. service.SetUpdatedInfo(product, s.GetCxtUserId(), s.GetCxtUserName())
  98. _, err = s.Dao.WherePri(req.Id).Update(product)
  99. if err != nil {
  100. g.Log().Error(err)
  101. return
  102. }
  103. return
  104. }
  105. // UpdateState 修改数据
  106. func (s *productService) UpdateState(req *model.UpdateStateReq) (err error) {
  107. _, err = s.Dao.WherePri(req.Id).Update(fmt.Sprintf("state='%v'", req.State))
  108. if err != nil {
  109. g.Log().Error(err)
  110. return
  111. }
  112. return
  113. }
  114. // DeleteByIds 删掉数据
  115. func (s *productService) DeleteByIds(ids []int64) (err error) {
  116. if len(ids) == 1 {
  117. count, err := s.Dao.WherePri(ids[0]).Count()
  118. if err != nil {
  119. g.Log().Error(err)
  120. return err
  121. }
  122. if count == 0 {
  123. return myerrors.TipsError("数据不存在或已被删除,请刷新页面")
  124. }
  125. _, err = s.Dao.WherePri(s.Dao.C.Id, ids[0]).Delete()
  126. if err != nil {
  127. g.Log().Error(err)
  128. return err
  129. }
  130. return err
  131. } else {
  132. _, err := s.Dao.WhereIn(s.Dao.C.Id, ids).LockShared().Count()
  133. if err != nil {
  134. g.Log().Error(err)
  135. return err
  136. }
  137. result, err := s.Dao.WhereIn(s.Dao.C.Id, ids).Delete()
  138. if err != nil {
  139. g.Log().Error(err)
  140. return err
  141. }
  142. rows, err := result.RowsAffected()
  143. if err == nil {
  144. if len(ids) != int(rows) {
  145. return myerrors.TipsError(fmt.Sprintf("应更新%d行,实际更新%d行", len(ids), int(rows)))
  146. }
  147. }
  148. }
  149. return nil
  150. }