|
@@ -493,3 +493,65 @@ func (s *StoreEntry) MatingCreate(ctx context.Context, req *pasturePb.EventMatin
|
|
|
|
|
|
return nil
|
|
|
}
|
|
|
+
|
|
|
+func (s *StoreEntry) WeaningBatch(ctx context.Context, req *pasturePb.EventWeaningBatchRequest) error {
|
|
|
+ if len(req.Item) <= 0 {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ cowIds := make([]int64, 0)
|
|
|
+ cowWeightMap := make(map[int64]float64)
|
|
|
+ for _, item := range req.Item {
|
|
|
+ cowIds = append(cowIds, int64(item.CowId))
|
|
|
+ cowWeightMap[int64(item.CowId)] = float64(item.Weight)
|
|
|
+ }
|
|
|
+
|
|
|
+ eventWeaningList := make([]*model.EventWeaning, 0)
|
|
|
+
|
|
|
+ if err := s.DB.Model(new(model.EventWeaning)).
|
|
|
+ Where("cow_id IN ?", cowIds).
|
|
|
+ Where("status = ?", pasturePb.IsShow_No).
|
|
|
+ Find(&eventWeaningList).Error; err != nil {
|
|
|
+ return xerr.WithStack(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ operation, err := s.GetSystemUserById(ctx, int64(req.OperationId))
|
|
|
+ if err != nil {
|
|
|
+ return xerr.WithStack(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ currentUser, err := s.GetCurrentSystemUser(ctx)
|
|
|
+ if err != nil {
|
|
|
+ return xerr.WithStack(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if err = s.DB.Transaction(func(tx *gorm.DB) error {
|
|
|
+ for _, v := range eventWeaningList {
|
|
|
+ if err = tx.Model(new(model.EventWeaning)).Where("id = ?", v.Id).Updates(map[string]interface{}{
|
|
|
+ "status": pasturePb.IsShow_Ok,
|
|
|
+ "reality_day": int64(req.WeaningAt),
|
|
|
+ "operation_id": req.OperationId,
|
|
|
+ "operation_name": operation.Name,
|
|
|
+ "message_id": currentUser.Id,
|
|
|
+ "message_name": currentUser.Name,
|
|
|
+ "remarks": req.Remarks,
|
|
|
+ "after_pen_id": req.PenId,
|
|
|
+ }).Error; err != nil {
|
|
|
+ return xerr.WithStack(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if err = tx.Model(new(model.Cow)).Where("id = ?", v.CowId).Updates(map[string]interface{}{
|
|
|
+ "pen_id": req.PenId,
|
|
|
+ "current_weight": cowWeightMap[v.CowId],
|
|
|
+ "weaning_at": req.WeaningAt,
|
|
|
+ "last_weight_at": req.WeaningAt,
|
|
|
+ }).Error; err != nil {
|
|
|
+ return xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+ }); err != nil {
|
|
|
+ return xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|