event.go 6.0 KB

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