event.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package backend
  2. import (
  3. "context"
  4. "fmt"
  5. "kpt-pasture/model"
  6. "net/http"
  7. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  8. "gitee.com/xuyiping_admin/pkg/xerr"
  9. "gorm.io/gorm"
  10. )
  11. func (s *StoreEntry) EnterList(ctx context.Context, req *pasturePb.SearchEventRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchEnterEventResponse, error) {
  12. eventEnterList := make([]*pasturePb.SearchEnterData, 0)
  13. var count int64 = 0
  14. pref := s.DB.Table(fmt.Sprintf("%s as a", new(model.EventEnter).TableName())).
  15. Select(`a.id,a.birth_at,a.weaning_at,a.dry_milk_at,a.cow_source_id,a.remarks,a.mating_at,a.status,
  16. a.lact,a.breed_status_id,a.mother_id,a.cow_kind_id,a.cow_id,a.ear_number,a.sex,a.created_at,
  17. a.weight / 100 as weight,a.price / 100 as price,b.name as breed_status_name,
  18. c.name as cow_source_name,d.name as cow_type_name,e.name as cow_kind_name,f.name as pen_name,g.name as operation_name`).
  19. Joins(fmt.Sprintf("JOIN %s AS b ON a.breed_status_id = b.id", new(model.ConfigBreedStatus).TableName())).
  20. Joins(fmt.Sprintf("JOIN %s AS c on a.cow_source_id = c.id", new(model.ConfigCowSource).TableName())).
  21. Joins(fmt.Sprintf("JOIN %s AS d on a.cow_type_id = d.id", new(model.ConfigCowType).TableName())).
  22. Joins(fmt.Sprintf("JOIN %s AS e ON a.cow_kind_id = e.id", new(model.ConfigCowKind).TableName())).
  23. Joins(fmt.Sprintf("JOIN %s AS f on a.pen_id = f.id", new(model.Pen).TableName())).
  24. Joins(fmt.Sprintf("JOIN %s AS g on a.operation_id = g.id", new(model.SystemUser).TableName()))
  25. if req.CowId > 0 {
  26. pref.Where("a.cow_id = ?", req.CowId)
  27. }
  28. if err := pref.Order("a.id desc").
  29. Count(&count).Limit(int(pagination.PageSize)).
  30. Offset(int(pagination.PageOffset)).
  31. Find(&eventEnterList).Error; err != nil {
  32. return nil, xerr.WithStack(err)
  33. }
  34. return &pasturePb.SearchEnterEventResponse{
  35. Code: http.StatusOK,
  36. Message: "ok",
  37. Data: &pasturePb.SearchEnterEventData{
  38. List: eventEnterList,
  39. Total: int32(count),
  40. PageSize: pagination.PageSize,
  41. Page: pagination.Page,
  42. },
  43. }, nil
  44. }
  45. func (s *StoreEntry) CreateEnter(ctx context.Context, req *pasturePb.SearchEnterData) error {
  46. if err := s.DB.Transaction(func(tx *gorm.DB) error {
  47. newCowData := model.NewCow(req)
  48. if err := tx.Create(newCowData).Error; err != nil {
  49. return xerr.WithStack(err)
  50. }
  51. operationUser, _ := s.GetCurrentSystemUser(ctx)
  52. if err := tx.Create(model.NewEventEnter(newCowData.Id, operationUser.Id, req)).Error; err != nil {
  53. return xerr.WithStack(err)
  54. }
  55. return nil
  56. }); err != nil {
  57. return xerr.WithStack(err)
  58. }
  59. return nil
  60. }
  61. func (s *StoreEntry) GroupTransferList(ctx context.Context, req *pasturePb.SearchEventRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchTransferGroupEventResponse, error) {
  62. eventGroupTransferList := make([]*pasturePb.SearchTransferGroupData, 0)
  63. var count int64 = 0
  64. pref := s.DB.Table(fmt.Sprintf("%s as a", new(model.EventTransferGroup).TableName())).
  65. Select(`a.id,a.cow_id,a.transfer_in_pen_id,a.transfer_out_pen_id,a.lact,a.remarks,a.transfer_reason_id,
  66. a.transfer_date,a.created_at,a.staff_member_id,b.name as transfer_in_pen_name,c.name as transfer_out_pen_name,
  67. d.name as transfer_reason_name,e.name as staff_member_name,f.lact,f.ear_number`).
  68. Joins(fmt.Sprintf("JOIN %s AS b ON a.transfer_in_pen_id = b.id", new(model.Pen).TableName())).
  69. Joins(fmt.Sprintf("JOIN %s AS c on a.transfer_out_pen_id = c.id", new(model.Pen).TableName())).
  70. Joins(fmt.Sprintf("JOIN %s AS d on a.transfer_reason_id = d.id", new(model.ConfigTransferPenReason).TableName())).
  71. Joins(fmt.Sprintf("JOIN %s AS e ON a.staff_member_id = e.id", new(model.SystemUser).TableName())).
  72. Joins(fmt.Sprintf("JOIN %s AS f ON a.cow_id = b.id", new(model.Cow).TableName()))
  73. if req.CowId > 0 {
  74. pref.Where("a.cow_id = ?", req.CowId)
  75. }
  76. if err := pref.Order("a.id desc").Group("a.id").
  77. Count(&count).Limit(int(pagination.PageSize)).
  78. Offset(int(pagination.PageOffset)).
  79. Find(&eventGroupTransferList).Error; err != nil {
  80. return nil, xerr.WithStack(err)
  81. }
  82. return &pasturePb.SearchTransferGroupEventResponse{
  83. Code: http.StatusOK,
  84. Message: "ok",
  85. Data: &pasturePb.SearchTransferGroupEventData{
  86. List: eventGroupTransferList,
  87. Total: int32(count),
  88. PageSize: pagination.PageSize,
  89. Page: pagination.Page,
  90. },
  91. }, nil
  92. }
  93. func (s *StoreEntry) CreateGroupTransfer(ctx context.Context, req *pasturePb.TransferGroupEventRequest) error {
  94. system, _ := s.GetCurrentSystemUser(ctx)
  95. res := make([]*model.EventTransferGroup, 0)
  96. for _, v := range req.Body {
  97. cow, err := s.GetCowInfo(ctx, int64(v.CowId))
  98. if err != nil {
  99. return xerr.WithStack(err)
  100. }
  101. // 转去栏舍和当前栏舍相同,则不处理
  102. if cow.PenId == int64(v.TransferInPenId) {
  103. continue
  104. }
  105. pen, err := s.GetPenInfo(ctx, int64(v.TransferInPenId))
  106. if err != nil {
  107. return xerr.WithStack(err)
  108. }
  109. transferReasonData, err := s.GetTransferReasonInfo(ctx, int64(v.TransferReasonId))
  110. if err != nil {
  111. return xerr.WithStack(err)
  112. }
  113. staffMemberData, err := s.GetSystemUserInfo(ctx, int64(v.StaffMemberId))
  114. if err != nil {
  115. return xerr.WithStack(err)
  116. }
  117. res = append(res, &model.EventTransferGroup{
  118. CowId: int64(v.CowId),
  119. TransferInPenId: int64(v.TransferInPenId),
  120. TransferOutPenId: pen.Id,
  121. Lact: cow.Lact,
  122. TransferDate: v.TransferDate,
  123. TransferReasonId: transferReasonData.Id,
  124. Remarks: v.Remarks,
  125. StaffMemberId: staffMemberData.Id,
  126. OperationId: system.Id,
  127. })
  128. }
  129. if len(res) <= 0 {
  130. return nil
  131. }
  132. if err := s.DB.Transaction(func(tx *gorm.DB) error {
  133. if err := tx.Create(res).Error; err != nil {
  134. return xerr.WithStack(err)
  135. }
  136. for _, v := range res {
  137. cow, err := s.GetCowInfo(ctx, v.CowId)
  138. if err != nil {
  139. return xerr.WithStack(err)
  140. }
  141. if err = s.DB.Model(cow).Update("pen_id", v.TransferInPenId).Error; err != nil {
  142. return xerr.WithStack(err)
  143. }
  144. }
  145. return nil
  146. }); err != nil {
  147. return xerr.WithStack(err)
  148. }
  149. return nil
  150. }