Browse Source

event: 入场事件

Yi 10 months ago
parent
commit
a0695f3233
5 changed files with 132 additions and 15 deletions
  1. 7 2
      http/handler/event/event.go
  2. 71 0
      model/cow.go
  3. 31 3
      model/event_enter.go
  4. 22 9
      module/backend/event.go
  5. 1 1
      module/backend/interface.go

+ 7 - 2
http/handler/event/event.go

@@ -42,15 +42,20 @@ func EnterEventCreate(c *gin.Context) {
 	}
 
 	if err := valid.ValidateStruct(&req,
-		valid.Field(&req.CowId, valid.Required),
 		valid.Field(&req.EarNumber, valid.Required),
 		valid.Field(&req.BirthAt, valid.Required),
+		valid.Field(&req.Sex, valid.Required),
+		valid.Field(&req.CowTypeId, valid.Required),
+		valid.Field(&req.CowKindId, valid.Required),
+		valid.Field(&req.CowSourceId, valid.Required),
+		valid.Field(&req.Lact, valid.Required),
+		valid.Field(&req.EnterAt, valid.Required),
 	); err != nil {
 		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
 		return
 	}
 
-	if err := middleware.BackendOperation(c).OpsService.CreateEnterEvent(c, &req); err != nil {
+	if err := middleware.BackendOperation(c).OpsService.CreateEnter(c, &req); err != nil {
 		apierr.ClassifiedAbort(c, err)
 		return
 	}

+ 71 - 0
model/cow.go

@@ -0,0 +1,71 @@
+package model
+
+import pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
+
+type Cow struct {
+	Id                  int64                  `json:"id"`
+	Sex                 pasturePb.Genders_Kind `json:"sex"`
+	NeckRingNumber      string                 `json:"neck_ring_number"`
+	EarNumber           string                 `json:"ear_number"`
+	EarOldNumber        string                 `json:"ear_old_number"`
+	PenId               int64                  `json:"pen_id"`
+	Lact                int32                  `json:"lact"`
+	TypeId              int32                  `json:"type_id"`
+	BreedStatusId       int32                  `json:"breed_status_id"`
+	KindId              int32                  `json:"kind_id"`
+	BirthWeight         int64                  `json:"birth_weight"`
+	CurrentWeight       int64                  `json:"current_weight"`
+	SourceId            int32                  `json:"source_id"`
+	FatherId            int32                  `json:"father_id"`
+	MotherId            int32                  `json:"mother_id"`
+	IsRemove            pasturePb.IsShow_Kind  `json:"is_remove"`
+	IsPregnant          pasturePb.IsShow_Kind  `json:"is_pregnant"`
+	Status              int32                  `json:"status"`
+	WeaningAt           int64                  `json:"weaning_at"`
+	BirthAt             int64                  `json:"birth_at"`
+	FirstMatingAt       int64                  `json:"first_mating_at"`
+	LastEstrusAt        int64                  `json:"last_estrus_at"`
+	LastCalvingAt       int64                  `json:"last_calving_at"`
+	LastMatingAt        int64                  `json:"last_mating_at"`
+	LastPregnantCheckAt int64                  `json:"last_pregnant_check_at"`
+	LastDryMilkAt       int64                  `json:"last_dry_milk_at"`
+	CreatedAt           int64                  `json:"created_at"`
+	UpdatedAt           int64                  `json:"updated_at"`
+}
+
+func (c *Cow) TableName() string {
+	return "cow"
+}
+
+func NewCow(req *pasturePb.SearchEnterData) *Cow {
+	var (
+		status     int32                 = 1
+		isPregnant pasturePb.IsShow_Kind = pasturePb.IsShow_No
+	)
+
+	if req.BreedStatusId == 4 || req.BreedStatusId == 5 {
+		isPregnant = pasturePb.IsShow_Ok
+		status = 4
+	}
+
+	return &Cow{
+		Sex:                 req.Sex,
+		EarNumber:           req.EarNumber,
+		PenId:               int64(req.PenId),
+		Lact:                req.Lact,
+		TypeId:              req.CowTypeId,
+		BreedStatusId:       req.BreedStatusId,
+		KindId:              req.CowKindId,
+		SourceId:            req.CowSourceId,
+		FatherId:            req.FatherId,
+		MotherId:            req.MotherId,
+		IsRemove:            pasturePb.IsShow_Ok,
+		IsPregnant:          isPregnant,
+		Status:              status,
+		WeaningAt:           int64(req.WeaningAt),
+		BirthAt:             int64(req.BirthAt),
+		FirstMatingAt:       int64(req.MatingAt),
+		LastMatingAt:        int64(req.MatingAt),
+		LastPregnantCheckAt: int64(req.PregnancyCheckAt),
+	}
+}

+ 31 - 3
model/event_enter.go

@@ -9,14 +9,15 @@ type EventEnter struct {
 	EarNumber        string                 `json:"ear_number"`
 	CowId            int64                  `json:"cow_id"`
 	Sex              pasturePb.Genders_Kind `json:"sex"`
-	BrithAt          int64                  `json:"brith_at"`
-	CowSourceId      int64                  `json:"cow_source_id"`
+	BirthAt          int64                  `json:"birth_at"`
+	CowSourceId      int32                  `json:"cow_source_id"`
 	OldEarNumber     string                 `json:"old_ear_number"`
 	CowTypeId        int32                  `json:"cow_type_id"`
 	BreedStatusId    int32                  `json:"breed_status_id"`
 	Lact             int32                  `json:"lact"`
 	PenId            int32                  `json:"pen_id"`
 	CowKindId        int32                  `json:"cow_kind_id"`
+	Status           int32                  `json:"status"`
 	FatherId         int64                  `json:"father_id"`
 	MotherId         int64                  `json:"mother_id"`
 	MatingAt         int64                  `json:"mating_at"`
@@ -36,6 +37,33 @@ type EventEnter struct {
 func (e *EventEnter) TableName() string {
 	return "event_enter"
 }
+func NewEventEnter(cowId, operationId int64, req *pasturePb.SearchEnterData) *EventEnter {
+	return &EventEnter{
+		EarNumber:        req.EarNumber,
+		CowId:            cowId,
+		Sex:              req.Sex,
+		BirthAt:          int64(req.BirthAt),
+		CowSourceId:      req.CowSourceId,
+		CowTypeId:        req.CowTypeId,
+		BreedStatusId:    req.BreedStatusId,
+		Lact:             req.Lact,
+		PenId:            req.PenId,
+		CowKindId:        req.CowKindId,
+		Status:           1,
+		FatherId:         int64(req.FatherId),
+		MotherId:         int64(req.MotherId),
+		MatingAt:         int64(req.MatingAt),
+		PregnancyCheckAt: int64(req.PregnancyCheckAt),
+		DryMilkAt:        int64(req.DryMilkAt),
+		WeaningAt:        int64(req.WeaningAt),
+		EstrusAt:         int64(req.EstrusAt),
+		EnterAt:          int64(req.EnterAt),
+		Remarks:          req.Remarks,
+		Weight:           int64(req.Weight * 100),
+		Price:            int64(req.Price * 100),
+		OperationId:      operationId,
+	}
+}
 
 type EventEnterSlice []*EventEnter
 
@@ -47,7 +75,7 @@ func (e EventEnterSlice) ToPB() []*pasturePb.SearchEnterData {
 			EarNumber:        d.EarNumber,
 			CowId:            int32(d.CowId),
 			Sex:              d.Sex,
-			BirthAt:          int32(d.BrithAt),
+			BirthAt:          int32(d.BirthAt),
 			CowSourceId:      int32(d.CowSourceId),
 			CowTypeId:        d.CowTypeId,
 			BreedStatusId:    d.BreedStatusId,

+ 22 - 9
module/backend/event.go

@@ -6,26 +6,25 @@ import (
 	"kpt-pasture/model"
 	"net/http"
 
-	"gitee.com/xuyiping_admin/pkg/logger/zaplog"
-	"go.uber.org/zap"
-
-	"gitee.com/xuyiping_admin/pkg/xerr"
+	"gorm.io/gorm"
 
 	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
+	"gitee.com/xuyiping_admin/pkg/xerr"
 )
 
 func (s *StoreEntry) EnterList(ctx context.Context, req *pasturePb.SearchEnterEventRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchEnterEventResponse, error) {
 	eventEnterList := make([]*pasturePb.SearchEnterData, 0)
 	var count int64 = 0
 	pref := s.DB.Table(fmt.Sprintf("%s as a", new(model.EventEnter).TableName())).
-		Select("a.*,b.name as breed_status_name,c.name as cow_source_name ,d.name as cow_type_name,e.name as cow_kind_name,f.name as pen_name").
+		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,a.breed_status_id,a.mother_id,a.cow_kind_id,a.cow_id,b.name as breed_status_name,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").
 		Joins(fmt.Sprintf("JOIN %s AS b ON a.breed_status_id = b.id", new(model.ConfigBreedStatus).TableName())).
 		Joins(fmt.Sprintf("JOIN %s AS c on a.cow_source_id = c.id", new(model.ConfigCowSource).TableName())).
 		Joins(fmt.Sprintf("JOIN %s AS d on a.cow_type_id = d.id", new(model.ConfigCowType).TableName())).
 		Joins(fmt.Sprintf("JOIN %s AS e ON a.cow_kind_id = e.id", new(model.ConfigCowKind).TableName())).
-		Joins(fmt.Sprintf("JOIN %s AS f on a.pen_id = f.id", new(model.Pen).TableName()))
+		Joins(fmt.Sprintf("JOIN %s AS f on a.pen_id = f.id", new(model.Pen).TableName())).
+		Joins(fmt.Sprintf("JOIN %s AS g on a.operation_id = g.id", new(model.SystemUser).TableName()))
 	if req.CowId > 0 {
-		pref.Where("a.cow_id ?", req.CowId)
+		pref.Where("a.cow_id = ?", req.CowId)
 	}
 
 	if err := pref.Order("a.id desc").
@@ -47,7 +46,21 @@ func (s *StoreEntry) EnterList(ctx context.Context, req *pasturePb.SearchEnterEv
 	}, nil
 }
 
-func (s *StoreEntry) CreateEnterEvent(ctx context.Context, req *pasturePb.SearchEnterData) error {
-	zaplog.Info("CreateEnterEvent", zap.Any("req", req))
+func (s *StoreEntry) CreateEnter(ctx context.Context, req *pasturePb.SearchEnterData) error {
+	if err := s.DB.Transaction(func(tx *gorm.DB) error {
+		newCowData := model.NewCow(req)
+		if err := tx.Create(newCowData).Error; err != nil {
+			return xerr.WithStack(err)
+		}
+
+		operationUser, _ := s.GetCurrentSystemUser(ctx)
+		if err := tx.Create(model.NewEventEnter(newCowData.Id, operationUser.Id, req)).Error; err != nil {
+			return xerr.WithStack(err)
+		}
+
+		return nil
+	}); err != nil {
+		return xerr.WithStack(err)
+	}
 	return nil
 }

+ 1 - 1
module/backend/interface.go

@@ -121,5 +121,5 @@ type ConfigDataService interface {
 //go:generate mockgen -destination mock/EventService.go -package kptservicemock kpt-pasture/module/backend EventService
 type EventService interface {
 	EnterList(ctx context.Context, req *pasturePb.SearchEnterEventRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchEnterEventResponse, error)
-	CreateEnterEvent(ctx context.Context, req *pasturePb.SearchEnterData) error
+	CreateEnter(ctx context.Context, req *pasturePb.SearchEnterData) error
 }