package backend import ( "context" "errors" "kpt-pasture/model" pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow" "gorm.io/gorm" "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("pasture_id = ?", userModel.AppPasture.Id). 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, "is_bind": pasturePb.NeckRingIsBind_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 } func (s *StoreEntry) PastureInit(ctx context.Context, pastureId int64) error { if pastureId <= 0 { return xerr.New("pastureId invalid") } pasture := &model.AppPastureList{} if err := s.DB.Model(new(model.AppPastureList)). Where("id = ?", pastureId). First(pasture).Error; err != nil { return xerr.Customf("该牧场不存在:%d", pastureId) } deptList := make([]*model.SystemDept, 0) if err := s.DB.Model(new(model.SystemDept)). Where("id = ?", pasture.Id). Find(&deptList).Error; err != nil { return xerr.Customf("牧场初始化数据失败:%s", err.Error()) } if len(deptList) > 0 { return xerr.Customf("该牧场已初始化:%d", pastureId) } dataWaringTypeEnumList := s.DataWaringTypeEnumList("all") dataWarningList := model.DataWarningInitData(pastureId, dataWaringTypeEnumList) if err := s.DB.Transaction(func(tx *gorm.DB) error { for _, dataWarning := range dataWarningList { if err := tx.Model(new(model.DataWarning)). Create(dataWarning).Error; err != nil { zaplog.Error("PastureInit-DataWarning", zap.Any("error", err)) } dataWarningItemsList := model.DataWarningItemsInitData(pastureId, dataWarning) if err := tx.Model(new(model.DataWarningItems)). Create(dataWarningItemsList).Error; err != nil { zaplog.Error("PastureInit-DataWarningItems", zap.Any("error", err)) } } nackRingConfigureList := model.NeckRingConfigureInit(pastureId) if err := tx.Model(new(model.NeckRingConfigure)). Create(nackRingConfigureList).Error; err != nil { zaplog.Error("PastureInit-NeckRingConfigure", zap.Any("error", err)) } // 初始化牧场和部门数据 newSystemPastureDept := model.NewSystemPastureDeptInit(pasture) if err := tx.Model(new(model.SystemDept)). Create(newSystemPastureDept).Error; err != nil { zaplog.Error("PastureInit-SystemDept", zap.Any("error", err)) } newSystemDept := model.NewSystemDeptInit(pasture.Id, newSystemPastureDept.Id) if err := tx.Model(new(model.SystemDept)). Create(newSystemDept).Error; err != nil { zaplog.Error("PastureInit-SystemDept", zap.Any("error", err)) } return nil }); err != nil { return xerr.WithStack(err) } return nil } func (s *StoreEntry) AdmissionAge(ctx context.Context) error { /*for k, v := range admissionAgeMap { cowInfo, err := s.GetCowInfoByEarNumber(ctx, 4, k) if err != nil { zaplog.Error("CalvingAge", zap.Any("k", k), zap.Any("v", v), zap.Any("err", err)) continue } admissionAt, _ := util.TimeParseLocal(model.LayoutTime2, v) if !admissionAt.IsZero() { cowInfo.AdmissionAt = admissionAt.Unix() cowInfo.AdmissionAge = cowInfo.GetAdmissionAge() if err = s.DB.Model(new(model.Cow)). Where("id = ?", cowInfo.Id). Updates(map[string]interface{}{ "admission_at": cowInfo.AdmissionAt, "admission_age": cowInfo.AdmissionAge, }).Error; err != nil { zaplog.Error("CalvingAge", zap.Any("err", err)) } } }*/ return nil } func (s *StoreEntry) CalvingAge(ctx context.Context) error { /*for k, v := range calvingAgeMap { if v == "" { continue } cowInfo, err := s.GetCowInfoByEarNumber(ctx, 4, k) if err != nil { zaplog.Error("CalvingAge", zap.Any("k", k), zap.Any("v", v), zap.Any("err", err)) continue } calvingAt, _ := util.TimeParseLocal(model.LayoutTime2, v) if !calvingAt.IsZero() { cowInfo.LastCalvingAt = calvingAt.Unix() cowInfo.LactationAge = cowInfo.GetLactationDays() if err = s.DB.Model(new(model.Cow)). Where("id = ?", cowInfo.Id). Updates(map[string]interface{}{ "last_calving_at": cowInfo.LastCalvingAt, "lactation_age": cowInfo.LactationAge, }).Error; err != nil { zaplog.Error("CalvingAge", zap.Any("err", err)) } } }*/ return nil }