package backend import ( "context" "errors" "kpt-pasture/model" "gorm.io/gorm" pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow" "gitee.com/xuyiping_admin/pkg/logger/zaplog" "go.uber.org/zap" "gitee.com/xuyiping_admin/pkg/xerr" ) func (s *StoreEntry) CowNeckRingNumberBound(ctx context.Context, pagination *pasturePb.PaginationModel) error { userModel, err := s.GetUserModel(ctx) if err != nil { return xerr.WithStack(err) } lastNeckRing := &model.NeckRing{} if err = s.DB.Model(new(model.NeckRing)). Order("cow_id desc"). First(lastNeckRing).Error; err != nil { return xerr.WithStack(err) } cowList := make([]*model.Cow, 0) if err = s.DB.Model(new(model.Cow)). Where("id > ?", lastNeckRing.CowId). Limit(int(pagination.PageSize)). Offset(int(pagination.PageOffset)). Find(&cowList).Error; err != nil { return xerr.WithStack(err) } newNeckRingList := make([]*model.NeckRing, 0) newNeckRingBindLogList := make([]*model.NeckRingBindLog, 0) for _, cow := range cowList { newNeckRing := model.NewNeckRing(userModel.AppPasture.Id, cow.NeckRingNumber, cow, userModel.SystemUser) newNeckRingList = append(newNeckRingList, newNeckRing) newNeckRingBindLog := model.NewNeckRingBindLog(userModel.AppPasture.Id, cow.NeckRingNumber, cow, userModel.SystemUser) newNeckRingBindLogList = append(newNeckRingBindLogList, newNeckRingBindLog) } if err = s.DB.Model(new(model.NeckRing)). Create(newNeckRingList).Error; err != nil { zaplog.Error("CowNeckRingNumberBound-NewNeckRing", zap.Any("error", err)) } if err = s.DB.Model(new(model.NeckRingBindLog)). Create(newNeckRingBindLogList).Error; err != nil { zaplog.Error("CowNeckRingNumberBound-NeckRingBindLog", zap.Any("error", err)) } return nil } func (s *StoreEntry) CowNeckRingNumberBound2(ctx context.Context, pagination *pasturePb.PaginationModel) error { userModel, err := s.GetUserModel(ctx) if err != nil { return xerr.WithStack(err) } cowList := make([]*model.Cow, 0) if err = s.DB.Model(new(model.Cow)). Where("neck_ring_number != ?", ""). Limit(int(pagination.PageSize)). Offset(int(pagination.PageOffset)). Find(&cowList).Error; err != nil { return xerr.WithStack(err) } for _, cow := range cowList { newNeckRing := model.NewNeckRing(userModel.AppPasture.Id, cow.NeckRingNumber, cow, userModel.SystemUser) oldNeckRing := &model.NeckRing{} if err = s.DB.Model(new(model.NeckRing)). Where("pasture_id = ?", userModel.AppPasture.Id). Where("neck_ring_number = ?", cow.NeckRingNumber). First(oldNeckRing).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { if err = s.DB.Model(new(model.NeckRing)).Create(newNeckRing).Error; err != nil { zaplog.Error("CowNeckRingNumberBound2-NewNeckRing", zap.Any("error", err)) } } else { continue } } if oldNeckRing.Id > 0 { if err = s.DB.Model(new(model.NeckRing)). Where("id = ?", oldNeckRing.Id).Updates(map[string]interface{}{ "cow_id": cow.Id, "ear_number": cow.EarNumber, "status": pasturePb.NeckRingStatus_Bind, }).Error; err != nil { zaplog.Error("CowNeckRingNumberBound2-OldNeckRing", zap.Any("error", err)) } } } return nil } func (s *StoreEntry) UpdateCowPen(ctx context.Context, pagination *pasturePb.PaginationModel) error { cowList := make([]*model.Cow, 0) if err := s.DB.Model(new(model.Cow)). Where("pen_name = ?", ""). Limit(int(pagination.PageSize)). Offset(int(pagination.PageOffset)). Find(&cowList).Error; err != nil { return xerr.WithStack(err) } penMap := s.PenMap(ctx, 1) for _, v := range cowList { pen := penMap[v.PenId] if pen == nil { continue } if err := s.DB.Model(new(model.Cow)). Where("id = ?", v.Id). Update("pen_name", pen.Name).Error; err != nil { zaplog.Error("UpdateCowPen", zap.Any("error", err)) } } return nil }