pasture_sync_service.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. package backend
  2. import (
  3. "context"
  4. "errors"
  5. "kpt-tmr-group/model"
  6. "kpt-tmr-group/pkg/xerr"
  7. operationPb "kpt-tmr-group/proto/go/backend/operation"
  8. "math"
  9. "net/http"
  10. "gorm.io/gorm"
  11. )
  12. const (
  13. FeedCategory = "feed"
  14. FeedCategoryDelete = "feed_delete"
  15. CowCategory = "cow"
  16. CowCategoryDelete = "cow_delete"
  17. )
  18. func (s *StoreEntry) CategorySyncData(ctx context.Context, req *operationPb.CategorySyncRequest) error {
  19. pastureDetail, err := s.GetGroupPastureListById(ctx, int64(req.PastureId))
  20. if err != nil {
  21. return xerr.WithStack(err)
  22. }
  23. switch req.KeyWord {
  24. case FeedCategory:
  25. history := &model.ForageCategory{}
  26. if err = s.DB.Model(new(model.ForageCategory)).
  27. Where("pasture_id = ?", req.PastureId).
  28. Where("data_id = ?", req.Id).
  29. Where("data_source = ? ", operationPb.DataSource_FROM_PASTURE).
  30. First(history).Error; err != nil {
  31. if !errors.Is(err, gorm.ErrRecordNotFound) {
  32. return xerr.WithStack(err)
  33. }
  34. }
  35. if history.IsShow == operationPb.IsShow_OK && history.Id > 0 {
  36. if err = s.DB.Model(new(model.ForageCategory)).Where("id = ?", history.Id).Updates(map[string]interface{}{
  37. "number": req.Number,
  38. "is_show": req.IsShow,
  39. "parent_id": req.ParentId,
  40. "parent_name": req.ParentName,
  41. "name": req.Name,
  42. }).Error; err != nil {
  43. return xerr.WithStack(err)
  44. }
  45. }
  46. newFeedData := model.NewPastureForageCategory(req, pastureDetail)
  47. if err = s.DB.Model(new(model.ForageCategory)).Create(newFeedData).Error; err != nil {
  48. return xerr.WithStack(err)
  49. }
  50. case CowCategory:
  51. history := &model.CattleCategory{}
  52. if err = s.DB.Model(new(model.CattleCategory)).
  53. Where("pasture_id = ?", req.PastureId).
  54. Where("data_id = ?", req.Id).
  55. Where("data_source = ? ", operationPb.DataSource_FROM_PASTURE).
  56. First(history).Error; err != nil {
  57. if !errors.Is(err, gorm.ErrRecordNotFound) {
  58. return xerr.WithStack(err)
  59. }
  60. }
  61. if history.IsShow == operationPb.IsShow_OK && history.Id > 0 {
  62. if err = s.DB.Model(new(model.CattleCategory)).Where("id = ?", history.Id).Updates(map[string]interface{}{
  63. "number": req.Number,
  64. "is_show": req.IsShow,
  65. "parent_id": req.ParentId,
  66. "parent_name": req.ParentName,
  67. "name": req.Name,
  68. }).Error; err != nil {
  69. return xerr.WithStack(err)
  70. }
  71. }
  72. newCattleData := model.NewPastureCattleCategory(req, pastureDetail)
  73. if err = s.DB.Model(new(model.CattleCategory)).Create(newCattleData).Error; err != nil {
  74. return xerr.WithStack(err)
  75. }
  76. }
  77. return nil
  78. }
  79. func (s *StoreEntry) CategoryDeleteData(ctx context.Context, req *operationPb.CategoryDeleteRequest) error {
  80. var modelValue interface{}
  81. switch req.KeyWord {
  82. case FeedCategoryDelete:
  83. modelValue = new(model.ForageCategory)
  84. case CowCategoryDelete:
  85. modelValue = new(model.CattleCategory)
  86. }
  87. if modelValue == nil {
  88. return nil
  89. }
  90. if err := s.DB.Model(modelValue).Where("data_id = ?", req.DataId).
  91. Where("pasture_id = ?", req.PastureId).Where("data_source = ?", operationPb.DataSource_FROM_PASTURE).
  92. Updates(map[string]interface{}{
  93. "is_delete": operationPb.IsShow_OK,
  94. }).Error; err != nil {
  95. return xerr.WithStack(err)
  96. }
  97. return nil
  98. }
  99. func (s *StoreEntry) FeedFormulaSyncData(ctx context.Context, req *operationPb.FeedFormulaSyncRequest) error {
  100. groupPastureList, err := s.DataSyncGroupPastureList(ctx)
  101. if err != nil {
  102. return xerr.WithStack(err)
  103. }
  104. var (
  105. ok bool
  106. groupPasture *model.GroupPasture
  107. )
  108. for _, pastureDetail := range groupPastureList {
  109. if pastureDetail.Id != int64(req.PastureId) {
  110. continue
  111. }
  112. groupPasture = pastureDetail
  113. ok = true
  114. }
  115. if ok {
  116. total := 0
  117. page := 1
  118. pageSize := 100
  119. for i := 0; i <= total; i++ {
  120. body := &model.FeedFormulaListRequest{
  121. PastureId: req.PastureId,
  122. Page: int32(page),
  123. PageSize: int32(pageSize),
  124. }
  125. response := &model.FeedFormulaListResponse{}
  126. if _, err = s.PastureHttpClient(ctx, model.FeedFormulaListAsyncUrl, int64(req.PastureId), body, response); err != nil {
  127. return xerr.WithStack(err)
  128. }
  129. if response.Code != http.StatusOK {
  130. return xerr.Customf("%s", response.Msg)
  131. }
  132. if response.Data.Total > 0 {
  133. total = int(math.Ceil(float64(response.Data.Total) / float64(pageSize)))
  134. }
  135. if err = s.FeedFormulaInsert(ctx, groupPasture, response.Data.List); err != nil {
  136. return xerr.WithStack(err)
  137. }
  138. }
  139. }
  140. return nil
  141. }
  142. func (s *StoreEntry) FeedFormulaInsert(ctx context.Context, groupPasture *model.GroupPasture, list []*model.FeedTemplate) error {
  143. res := make([]*model.FeedFormula, 0)
  144. for _, data := range list {
  145. res = append(res, &model.FeedFormula{
  146. Name: data.TName,
  147. Colour: data.TColor,
  148. EncodeNumber: data.TCode,
  149. CattleCategoryId: operationPb.CattleCategoryParent_Kind(data.CCid),
  150. CattleCategoryName: data.CCName,
  151. FormulaTypeId: data.FTTypeId,
  152. FormulaTypeName: data.FTType,
  153. DataSourceId: operationPb.DataSource_FROM_PASTURE,
  154. DataSourceName: "牧场同步",
  155. Remarks: data.Remark,
  156. Version: data.Version,
  157. PastureId: groupPasture.PastureId,
  158. PastureName: groupPasture.Name,
  159. IsShow: operationPb.IsShow_Kind(data.Enable),
  160. IsModify: operationPb.IsShow_Kind(data.IsModify),
  161. IsDelete: operationPb.IsShow_OK,
  162. })
  163. }
  164. if err := s.DB.Model(new(model.FeedFormula)).Create(res).Error; err != nil {
  165. return xerr.WithStack(err)
  166. }
  167. return nil
  168. }