event_breed_more_two.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package backend
  2. import (
  3. "context"
  4. "kpt-pasture/model"
  5. "net/http"
  6. "gorm.io/gorm"
  7. "gitee.com/xuyiping_admin/pkg/xerr"
  8. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  9. )
  10. func (s *StoreEntry) DryMilkList(ctx context.Context, req *pasturePb.SearchEventRequest, pagination *pasturePb.PaginationModel) (*pasturePb.EventMilkResponse, error) {
  11. userModel, err := s.GetUserModel(ctx)
  12. if err != nil {
  13. return nil, xerr.WithStack(err)
  14. }
  15. dryMilkList := make([]*model.EventDryMilk, 0)
  16. var count int64 = 0
  17. pref := s.DB.Model(new(model.EventDryMilk)).
  18. Where("pasture_id = ?", userModel.AppPasture.Id).
  19. Where("is_show = ?", pasturePb.IsShow_Ok)
  20. if req.EarNumber != "" {
  21. pref.Where("ear_number = ?", req.EarNumber)
  22. }
  23. if req.StartDayAt > 0 && req.EndDayAt > 0 && req.StartDayAt <= req.EndDayAt {
  24. pref.Where("reality_day BETWEEN ? AND ?", req.StartDayAt, req.EndDayAt)
  25. }
  26. if err = pref.Order("id desc").
  27. Count(&count).Limit(int(pagination.PageSize)).
  28. Offset(int(pagination.PageOffset)).
  29. Find(&dryMilkList).Error; err != nil {
  30. return nil, xerr.WithStack(err)
  31. }
  32. return &pasturePb.EventMilkResponse{
  33. Code: http.StatusOK,
  34. Msg: "ok",
  35. Data: &pasturePb.EventMilkData{
  36. List: model.EventDryMilkSlice(dryMilkList).ToPB(),
  37. Total: int32(count),
  38. PageSize: pagination.PageSize,
  39. Page: pagination.Page,
  40. },
  41. }, nil
  42. }
  43. func (s *StoreEntry) DryMilkBatch(ctx context.Context, req *pasturePb.EventMilkBatch) error {
  44. if len(req.Items) <= 0 {
  45. return nil
  46. }
  47. if len(req.Items) > 50 {
  48. return xerr.Custom("最多只能添加50条数据")
  49. }
  50. userModel, err := s.GetUserModel(ctx)
  51. if err != nil {
  52. return xerr.WithStack(err)
  53. }
  54. penMap := s.PenMap(ctx, userModel.AppPasture.Id)
  55. if err = s.DB.Transaction(func(tx *gorm.DB) error {
  56. for _, v := range req.Items {
  57. cowInfo, err := s.GetCowInfoByCowId(ctx, userModel.AppPasture.Id, int64(v.CowId))
  58. if err != nil {
  59. return xerr.WithStack(err)
  60. }
  61. cowInfo.EventDryMilkUpdate(int64(v.DryMilkAt), penMap[v.PenId])
  62. if err = tx.Select("milk_kind", "last_dry_milk_at", "pen_id", "pen_name").
  63. Where("id = ?", cowInfo.Id).
  64. Updates(cowInfo).Error; err != nil {
  65. return xerr.WithStack(err)
  66. }
  67. eventDryMilk := &model.EventDryMilk{}
  68. if err = tx.Model(new(model.EventDryMilk)).
  69. Where("pasture_id = ?", userModel.AppPasture.Id).
  70. Where("cow_id = ?", cowInfo.Id).
  71. Where("is_show = ?", pasturePb.IsShow_No).
  72. First(eventDryMilk).Error; err != nil {
  73. return xerr.WithStack(err)
  74. }
  75. if eventDryMilk.Id <= 0 {
  76. return xerr.Customf("不存在该数据: %s", cowInfo.EarNumber)
  77. }
  78. operationUser, err := s.GetSystemUserById(ctx, int64(v.OperationId))
  79. if err != nil {
  80. return xerr.Customf("获取操作人员信息失败")
  81. }
  82. eventDryMilk.EventDryMilkUpdate(cowInfo, int64(v.DryMilkAt), penMap[v.PenId], operationUser, userModel.SystemUser, v.Remarks)
  83. if err = tx.Select("lact", "reality_day", "plan_day", "is_show", "operation_id", "operation_name", "message_id", "message_name", "pen_id", "pen_name", "remarks").
  84. Where("id = ?", eventDryMilk.Id).
  85. Updates(eventDryMilk).Error; err != nil {
  86. return xerr.WithStack(err)
  87. }
  88. // 记录日志
  89. cowLog := s.SubmitEventLog(ctx, userModel.AppPasture.Id, cowInfo, pasturePb.EventType_Dry_Milk, eventDryMilk)
  90. if err = tx.Table(cowLog.TableName()).Create(cowLog).Error; err != nil {
  91. return xerr.WithStack(err)
  92. }
  93. }
  94. return nil
  95. }); err != nil {
  96. return xerr.WithStack(err)
  97. }
  98. return nil
  99. }