event.go 7.7 KB

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