Browse Source

event: mating 修改配种提交逻辑

Yi 4 months ago
parent
commit
0399953fe2

+ 1 - 1
go.mod

@@ -3,7 +3,7 @@ module kpt-pasture
 go 1.17
 
 require (
-	gitee.com/xuyiping_admin/go_proto v0.0.0-20241104025928-e62a2d8db6d6
+	gitee.com/xuyiping_admin/go_proto v0.0.0-20241105074912-bc99391ff5e0
 	gitee.com/xuyiping_admin/pkg v0.0.0-20241029095841-aa1fe89b557a
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible
 	github.com/eko/gocache v1.1.0

+ 4 - 0
go.sum

@@ -44,6 +44,10 @@ gitee.com/xuyiping_admin/go_proto v0.0.0-20241104023746-2df64dda0323 h1:lA3XTnnh
 gitee.com/xuyiping_admin/go_proto v0.0.0-20241104023746-2df64dda0323/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20241104025928-e62a2d8db6d6 h1:NqH5P8Sgm38m9RFb3cQnKIsX0qZqXefJrC7JjJUTB2g=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20241104025928-e62a2d8db6d6/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20241105012623-f1bbf6690530 h1:XYf4/IuGdKl5h006Du829JTTO9YP8admhxnB20SogZM=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20241105012623-f1bbf6690530/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20241105074912-bc99391ff5e0 h1:YDGgqXp0ehW+aNEmf/vL2b6MWLp1hGbLvsVXe2Q7j2s=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20241105074912-bc99391ff5e0/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/pkg v0.0.0-20241029095841-aa1fe89b557a h1:z6Pp4HmdcxEZ43avmbFoE3vwEYcWnIefqEEZZWCHfek=
 gitee.com/xuyiping_admin/pkg v0.0.0-20241029095841-aa1fe89b557a/go.mod h1:8tF25X6pE9WkFCczlNAC0K2mrjwKvhhp02I7o0HtDxY=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=

+ 3 - 3
http/handler/event/event_base.go

@@ -105,7 +105,7 @@ func GroupTransferEventCreate(c *gin.Context) {
 				valid.Field(&s.TransferDate, valid.Required),
 				valid.Field(&s.TransferInPenId, valid.Required),
 				valid.Field(&s.TransferReasonId, valid.Required),
-				valid.Field(&s.StaffMemberId, valid.Required),
+				valid.Field(&s.OperationId, valid.Required),
 			)
 		}))),
 	); err != nil {
@@ -156,7 +156,7 @@ func BodyScoreEventCreate(c *gin.Context) {
 		valid.Field(&req.CowId, valid.Required),
 		valid.Field(&req.ScoreAt, valid.Required),
 		valid.Field(&req.Score, valid.Required),
-		valid.Field(&req.StaffMemberId, valid.Required),
+		valid.Field(&req.OperationId, valid.Required),
 	); err != nil {
 		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
 		return
@@ -205,7 +205,7 @@ func WeightEventCreate(c *gin.Context) {
 	if err := valid.ValidateStruct(&req,
 		valid.Field(&req.CowId, valid.Required),
 		valid.Field(&req.WeightAt, valid.Required),
-		valid.Field(&req.StaffMemberId, valid.Required),
+		valid.Field(&req.OperationId, valid.Required),
 		valid.Field(&req.WeightItems, valid.Required, valid.Each(valid.By(func(value interface{}) error {
 			s := value.(pasturePb.WeightItem)
 			return valid.ValidateStruct(&s,

+ 5 - 4
http/handler/event/event_breed.go

@@ -54,7 +54,7 @@ func CalvingEventCreate(c *gin.Context) {
 				valid.Field(&s.IsAdoption, valid.Required),
 			)
 		}))),
-		valid.Field(&req.StaffMemberId, valid.Required),
+		valid.Field(&req.OperationId, valid.Required),
 	); err != nil {
 		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
 		return
@@ -105,7 +105,7 @@ func PregnantCheckEventCreate(c *gin.Context) {
 		valid.Field(&req.PregnantCheckAt, valid.Required),
 		valid.Field(&req.PregnantCheckResult, valid.Required),
 		valid.Field(&req.PregnantCheckAt, valid.Required),
-		valid.Field(&req.StaffMemberId, valid.Required),
+		valid.Field(&req.OperationId, valid.Required),
 	); err != nil {
 		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
 		return
@@ -153,9 +153,10 @@ func MatingCreate(c *gin.Context) {
 
 	if err := valid.ValidateStruct(&req,
 		valid.Field(&req.CowId, valid.Required),
-		valid.Field(&req.StaffMemberId, valid.Required),
+		valid.Field(&req.OperationId, valid.Required),
 		valid.Field(&req.FrozenSemenNumber, valid.Required),
 		valid.Field(&req.MatingAt, valid.Required),
+		valid.Field(&req.FrozenSemenCount, valid.Required, valid.Min(1)),
 	); err != nil {
 		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
 		return
@@ -203,7 +204,7 @@ func EstrusCreate(c *gin.Context) {
 
 	if err := valid.ValidateStruct(&req,
 		valid.Field(&req.CowId, valid.Required),
-		valid.Field(&req.StaffMemberId, valid.Required),
+		valid.Field(&req.OperationId, valid.Required),
 		valid.Field(&req.EstrusAt, valid.Required),
 	); err != nil {
 		apierr.AbortBadRequest(c, http.StatusBadRequest, err)

+ 2 - 3
main.go

@@ -1,16 +1,15 @@
 /*
 Copyright © 2022 NAME HERE <EMAIL ADDRESS>
-
 */
 package main
 
 import (
-	"gitee.com/xuyiping_admin/pkg/logger/logrus"
 	"kpt-pasture/cmd"
+
+	"gitee.com/xuyiping_admin/pkg/logger/logrus"
 )
 
 func main() {
-	logrus.Info("kpt-pasture: is starting")
 	cmd.Execute()
 	logrus.Error("kpt-pasture: is shut down")
 }

+ 15 - 11
model/event_body_score.go

@@ -4,24 +4,26 @@ import pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
 
 type EventBodyScore struct {
 	Id            int64  `json:"id"`
-	CowId         int64  `json:"cow_id"`
-	EarNumber     string `json:"ear_number"`
+	CowId         int64  `json:"cowId"`
+	EarNumber     string `json:"earNumber"`
 	Score         int32  `json:"score"`
 	Lact          int32  `json:"lact"`
-	DayAge        int32  `json:"day_age"`
-	ScoreAt       int64  `json:"score_at"`
+	DayAge        int32  `json:"dayAge"`
+	ScoreAt       int64  `json:"scoreAt"`
 	Remarks       string `json:"remarks"`
-	StaffMemberId int64  `json:"staff_member_id"`
-	OperationId   int64  `json:"operation_id"`
-	CreatedAt     int64  `json:"created_at"`
-	UpdatedAt     int64  `json:"updated_at"`
+	MessageId     int64  `json:"messageId"`
+	MessageName   string `json:"messageName"`
+	OperationId   int64  `json:"operationId"`
+	OperationName string `json:"operationName"`
+	CreatedAt     int64  `json:"createdAt"`
+	UpdatedAt     int64  `json:"updatedAt"`
 }
 
 func (e *EventBodyScore) TableName() string {
 	return "event_body_score"
 }
 
-func NewEventBodyScore(cow *Cow, operationId int64, req *pasturePb.BodyScoreEventRequest) *EventBodyScore {
+func NewEventBodyScore(cow *Cow, currentSystemUser *SystemUser, req *pasturePb.BodyScoreEventRequest) *EventBodyScore {
 	return &EventBodyScore{
 		CowId:         cow.Id,
 		EarNumber:     cow.EarNumber,
@@ -30,7 +32,9 @@ func NewEventBodyScore(cow *Cow, operationId int64, req *pasturePb.BodyScoreEven
 		DayAge:        cow.GetDayAge(),
 		ScoreAt:       int64(req.ScoreAt),
 		Remarks:       req.Remarks,
-		StaffMemberId: int64(req.StaffMemberId),
-		OperationId:   operationId,
+		MessageId:     currentSystemUser.Id,
+		MessageName:   currentSystemUser.Name,
+		OperationId:   int64(req.OperationId),
+		OperationName: req.OperationName,
 	}
 }

+ 61 - 0
model/event_cow_log.go

@@ -0,0 +1,61 @@
+package model
+
+import (
+	"fmt"
+
+	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
+)
+
+const ShardTableNumber = 6
+
+type EventCowLog struct {
+	Id               int64                  `json:"id"`
+	CowId            int64                  `json:"cowId"`
+	DayAge           int32                  `json:"dayAge"`
+	Lact             int32                  `json:"lact"`
+	PenId            int32                  `json:"penId"`
+	PenName          string                 `json:"penName"`
+	CowType          pasturePb.CowType_Kind `json:"cowType"`
+	CowTypeName      string                 `json:"cowTypeName"`
+	EventType        int64                  `json:"eventType"`
+	EventTypeName    string                 `json:"eventTypeName"`
+	EventDescription string                 `json:"eventDescription"`
+	OperationId      int64                  `json:"operationId"`
+	OperationName    string                 `json:"operationName"`
+	EventAt          string                 `json:"eventAt"`
+	Remarks          string                 `json:"remarks"`
+	CreatedAt        int64                  `json:"createdAt"`
+	UpdatedAt        int64                  `json:"updatedAt"`
+}
+
+func (e *EventCowLog) UnShardTableName() string {
+	return "event_cow_log"
+}
+
+// TableName 表名
+func (e *EventCowLog) TableName() string {
+	return fmt.Sprintf("%s_%04d", e.UnShardTableName(), e.CowId%ShardTableNumber)
+}
+
+func NewCowEventLog(cow *Cow, penMap map[int32]*Pen, cowType map[pasturePb.CowType_Kind]string, operation *SystemUser) *EventCowLog {
+	penName := ""
+	if pen, ok := penMap[cow.PenId]; ok {
+		penName = pen.Name
+	}
+	return &EventCowLog{
+		CowId:            cow.Id,
+		DayAge:           cow.GetDayAge(),
+		Lact:             cow.Lact,
+		PenId:            cow.PenId,
+		PenName:          penName,
+		CowType:          cow.CowType,
+		CowTypeName:      cowType[cow.CowType],
+		EventType:        0,
+		EventTypeName:    "",
+		EventDescription: "",
+		OperationId:      operation.Id,
+		OperationName:    operation.Name,
+		EventAt:          "",
+		Remarks:          "",
+	}
+}

+ 28 - 34
model/event_estrus.go

@@ -4,16 +4,18 @@ import pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
 
 type EventEstrus struct {
 	Id            int64  `json:"id"`
-	CowId         int64  `json:"cow_id"`
-	DayAge        int32  `json:"day_age"`
+	CowId         int64  `json:"cowId"`
+	DayAge        int32  `json:"dayAge"`
 	Lact          int8   `json:"lact"`
-	LactationDays int32  `json:"lactation_days"`
-	EstrusAt      int64  `json:"estrus_at"`
+	LactationDays int32  `json:"lactationDays"`
+	EstrusAt      int64  `json:"estrusAt"`
 	Remarks       string `json:"remarks"`
-	StallNumberId int64  `json:"stall_number_id"`
-	OperationId   int64  `json:"operation_id"`
-	CreatedAt     int64  `json:"created_at"`
-	UpdatedAt     int64  `json:"updated_at"`
+	OperationId   int64  `json:"operationId"`
+	OperationName string `json:"operationName"`
+	MessageId     int64  `json:"messageId"`
+	MessageName   string `json:"messageName"`
+	CreatedAt     int64  `json:"createdAt"`
+	UpdatedAt     int64  `json:"updatedAt"`
 }
 
 func (e *EventEstrus) TableName() string {
@@ -28,40 +30,32 @@ func NewEventEstrus(cow *Cow, currentUser *SystemUser, req *pasturePb.EventEstru
 		LactationDays: cow.GetLactationDays(),
 		EstrusAt:      int64(req.EstrusAt),
 		Remarks:       req.Remarks,
-		StallNumberId: int64(req.StaffMemberId),
-		OperationId:   currentUser.Id,
+		MessageId:     currentUser.Id,
+		MessageName:   currentUser.Name,
+		OperationId:   int64(req.OperationId),
+		OperationName: req.OperationName,
 	}
 }
 
 type EstrusSlice []*EventEstrus
 
-func (e EstrusSlice) ToPB(userList []*SystemUser) []*pasturePb.SearchEstrusList {
+func (e EstrusSlice) ToPB() []*pasturePb.SearchEstrusList {
 	res := make([]*pasturePb.SearchEstrusList, len(e))
 	for i, v := range e {
-		staffMemberName, operationName := "", ""
-		for _, u := range userList {
-			if u.Id == v.StallNumberId {
-				staffMemberName = u.Name
-			}
-			if u.Id == v.OperationId {
-				operationName = u.Name
-			}
-		}
-
 		res[i] = &pasturePb.SearchEstrusList{
-			Id:              int32(v.Id),
-			CowId:           int32(v.CowId),
-			DayAge:          v.DayAge,
-			Lact:            int32(v.Lact),
-			EstrusAt:        int32(v.EstrusAt),
-			LactationDays:   v.LactationDays,
-			StaffMemberId:   int32(v.StallNumberId),
-			StaffMemberName: staffMemberName,
-			Remarks:         v.Remarks,
-			OperationId:     int32(v.OperationId),
-			OperationName:   operationName,
-			CreatedAt:       int32(v.CreatedAt),
-			UpdatedAt:       int32(v.UpdatedAt),
+			Id:            int32(v.Id),
+			CowId:         int32(v.CowId),
+			DayAge:        v.DayAge,
+			Lact:          int32(v.Lact),
+			EstrusAt:      int32(v.EstrusAt),
+			LactationDays: v.LactationDays,
+			MessengerId:   int32(v.MessageId),
+			MessengerName: v.MessageName,
+			Remarks:       v.Remarks,
+			OperationId:   int32(v.OperationId),
+			OperationName: v.OperationName,
+			CreatedAt:     int32(v.CreatedAt),
+			UpdatedAt:     int32(v.UpdatedAt),
 		}
 	}
 	return res

+ 34 - 5
model/event_mating.go

@@ -9,8 +9,8 @@ import (
 type EventMating struct {
 	Id                int64                           `json:"id"`
 	CowId             int64                           `json:"cowId"`
-	DayAge            int64                           `json:"dayAge"`
-	Lact              int8                            `json:"lact"`
+	DayAge            int32                           `json:"dayAge"`
+	Lact              int32                           `json:"lact"`
 	CowType           pasturePb.CowType_Kind          `json:"cowType"`
 	CowKind           pasturePb.CowKind_Kind          `json:"cowKind"`
 	CalvingAge        int32                           `json:"calvingAge"`
@@ -27,6 +27,8 @@ type EventMating struct {
 	FrozenSemenCount  int32                           `json:"frozenSemenCount"`
 	OperationId       int64                           `json:"operationId"`
 	OperationName     string                          `json:"operationName"`
+	MessageId         int64                           `json:"messageId"`
+	MessageName       string                          `json:"messageName"`
 	Remarks           string                          `json:"remarks"`
 	CreatedAt         int64                           `json:"createdAt"`
 	UpdatedAt         int64                           `json:"updatedAt"`
@@ -39,7 +41,7 @@ func (e *EventMating) TableName() string {
 func NewEventMating(cow *Cow, planDay int64) *EventMating {
 	return &EventMating{
 		CowId:            cow.Id,
-		Lact:             int8(cow.Lact),
+		Lact:             cow.Lact,
 		CowType:          cow.CowType,
 		CowKind:          cow.CowKind,
 		CalvingAt:        cow.CalvingAt,
@@ -51,6 +53,30 @@ func NewEventMating(cow *Cow, planDay int64) *EventMating {
 	}
 }
 
+// NewEventMating2 自然发情的牛只
+func NewEventMating2(cow *Cow, req *pasturePb.EventMating) *EventMating {
+	return &EventMating{
+		CowId:             cow.Id,
+		Lact:              cow.Lact,
+		DayAge:            cow.GetDayAge(),
+		CowType:           cow.CowType,
+		CowKind:           cow.CowKind,
+		CalvingAt:         cow.CalvingAt,
+		PlanDay:           int64(req.MatingAt),
+		RealityDay:        int64(req.MatingAt),
+		EndDay:            int64(req.MatingAt),
+		MatingResult:      pasturePb.MatingResult_Invalid,
+		ExposeEstrusType:  pasturePb.ExposeEstrusType_Natural_Estrus,
+		Status:            pasturePb.IsShow_Ok,
+		MatingNumber:      1,
+		OperationId:       int64(req.OperationId),
+		OperationName:     req.OperationName,
+		FrozenSemenNumber: req.FrozenSemenNumber,
+		FrozenSemenCount:  req.FrozenSemenCount,
+		Remarks:           req.Remarks,
+	}
+}
+
 func NewEventMatingList(cowList []*Cow, planDay int64) []*EventMating {
 	var matingList []*EventMating
 	for _, cow := range cowList {
@@ -153,15 +179,18 @@ type MatingTimelyChart struct {
 func (e EventMatingSlice) ToPB2() []*pasturePb.CowList {
 	res := make([]*pasturePb.CowList, len(e))
 	for i, v := range e {
-		calvingAt := ""
+		calvingAt, matingAtFormat := "", ""
 		if v.CalvingAt > 0 {
 			calvingAt = time.Unix(v.CalvingAt, 0).Format(LayoutDate2)
 		}
+		if v.RealityDay > 0 {
+			matingAtFormat = time.Unix(v.RealityDay, 0).Format(LayoutDate2)
+		}
 		res[i] = &pasturePb.CowList{
 			CowId:           int32(v.CowId),
 			DayAge:          int32(v.DayAge),
 			CalvingAge:      v.CalvingAge,
-			MatingAtFormat:  time.Unix(v.RealityDay, 0).Format(LayoutDate2),
+			MatingAtFormat:  matingAtFormat,
 			CalvingAtFormat: calvingAt,
 			Lact:            int32(v.Lact),
 		}

+ 31 - 10
model/event_transfer_group.go

@@ -1,21 +1,42 @@
 package model
 
+import pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
+
 type EventTransferGroup struct {
 	Id               int64  `json:"id"`
-	CowId            int64  `json:"cow_id"`
-	TransferInPenId  int64  `json:"transfer_in_pen_id"`
-	TransferOutPenId int64  `json:"transfer_out_pen_id"`
-	DayAge           int32  `json:"day_age"`
+	CowId            int64  `json:"cowId"`
+	PenInId          int32  `json:"penInId"`
+	PenOutId         int32  `json:"penOutId"`
+	DayAge           int32  `json:"dayAge"`
 	Lact             int32  `json:"lact"`
-	TransferDate     string `json:"transfer_date"`
-	TransferReasonId int64  `json:"transfer_reason_id"`
+	TransferDate     string `json:"transferDate"`
+	TransferReasonId int64  `json:"transferReasonId"`
 	Remarks          string `json:"remarks"`
-	StaffMemberId    int64  `json:"staff_member_id"`
-	OperationId      int64  `json:"operation_id"`
-	CreatedAt        int64  `json:"created_at"`
-	UpdatedAt        int64  `json:"updated_at"`
+	MessageId        int64  `json:"messageId"`
+	MessageName      string `json:"messageName"`
+	OperationId      int64  `json:"operationId"`
+	OperationName    string `json:"operationName"`
+	CreatedAt        int64  `json:"createdAt"`
+	UpdatedAt        int64  `json:"updatedAt"`
 }
 
 func (e *EventTransferGroup) TableName() string {
 	return "event_transfer_group"
 }
+
+func NewEventTransferGroup(cow *Cow, req *pasturePb.TransferGroupEventData, currentUser *SystemUser, operationUser *SystemUser) *EventTransferGroup {
+	return &EventTransferGroup{
+		CowId:            int64(req.CowId),
+		PenInId:          req.TransferInPenId,
+		PenOutId:         cow.PenId,
+		Lact:             cow.Lact,
+		DayAge:           cow.GetDayAge(),
+		TransferDate:     req.TransferDate,
+		TransferReasonId: int64(req.TransferReasonId),
+		Remarks:          req.Remarks,
+		MessageId:        currentUser.Id,
+		MessageName:      currentUser.Name,
+		OperationId:      operationUser.Id,
+		OperationName:    operationUser.Name,
+	}
+}

+ 15 - 11
model/event_weight.go

@@ -4,17 +4,19 @@ import pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
 
 type EventWeight struct {
 	ID            int64  `json:"id"`
-	CowId         int64  `json:"cow_id"`
-	EarNumber     string `json:"ear_number"`
-	DayAge        int32  `json:"day_age"`
-	LactationDay  int64  `json:"lactation_day"`
-	PenId         int32  `json:"pen_id"`
+	CowId         int64  `json:"cowId"`
+	EarNumber     string `json:"earNumber"`
+	DayAge        int32  `json:"dayAge"`
+	LactationDay  int64  `json:"lactationDay"`
+	PenId         int32  `json:"penId"`
 	Lact          int32  `json:"lact"`
 	Weight        int32  `json:"weight"`
-	WeightAt      int64  `json:"weight_at"`
+	WeightAt      int64  `json:"weightAt"`
 	Remarks       string `json:"remarks"`
-	OperationId   int32  `json:"operation_id"`
-	StaffMemberId int32  `json:"staff_member_id"`
+	OperationId   int32  `json:"operationId"`
+	OperationName string `json:"operationName"`
+	MessageId     int64  `json:"messageId"`
+	MessageName   string `json:"messageName"`
 	CreatedAt     int64  `json:"created_at"`
 	UpdatedAt     int64  `json:"updated_at"`
 }
@@ -23,7 +25,7 @@ func (c *EventWeight) TableName() string {
 	return "event_weight"
 }
 
-func NewEventWeight(cow *Cow, systemUser *SystemUser, weight int32, req *pasturePb.EventWeight) *EventWeight {
+func NewEventWeight(cow *Cow, currentUser *SystemUser, weight int32, req *pasturePb.EventWeight) *EventWeight {
 	return &EventWeight{
 		CowId:         cow.Id,
 		EarNumber:     cow.EarNumber,
@@ -32,7 +34,9 @@ func NewEventWeight(cow *Cow, systemUser *SystemUser, weight int32, req *pasture
 		DayAge:        cow.GetDayAge(),
 		WeightAt:      int64(req.WeightAt),
 		Remarks:       req.Remarks,
-		StaffMemberId: req.StaffMemberId,
-		OperationId:   int32(systemUser.Id),
+		MessageId:     currentUser.Id,
+		MessageName:   currentUser.Name,
+		OperationId:   req.OperationId,
+		OperationName: req.OperationName,
 	}
 }

+ 26 - 10
model/frozen_semen_log.go

@@ -2,23 +2,39 @@ package model
 
 type FrozenSemenLog struct {
 	Id            int64  `json:"id"`
-	BullId        string `json:"bull_id"`
-	CowId         int64  `json:"cow_id"`
+	BullId        string `json:"bullId"`
+	CowId         int64  `json:"cowId"`
 	Quantity      int32  `json:"quantity"`
-	StallNumberId int64  `json:"stall_number_id"`
-	CreatedAt     int64  `json:"created_at"`
-	UpdatedAt     int64  `json:"updated_at"`
+	MatingAt      int64  `json:"matingAt"`
+	OperationId   int64  `json:"operationId"`
+	OperationName string `json:"operationName"`
+	Remarks       string `json:"remarks"`
+	CreatedAt     int64  `json:"createdAt"`
+	UpdatedAt     int64  `json:"updatedAt"`
 }
 
 func (e *FrozenSemenLog) TableName() string {
 	return "frozen_semen_log"
 }
 
-func NewEventFrozenSemenLog(bullId string, cow *Cow, stallNumberId int64) *FrozenSemenLog {
+type FrozenSemenItem struct {
+	CowId         int64  `json:"cowId"`
+	Quantity      int32  `json:"quantity"`
+	MatingAt      int64  `json:"matingAt"`
+	OperationId   int64  `json:"operationId"`
+	OperationName string `json:"operationName"`
+	BullId        string `json:"bullId"`
+	Remarks       string `json:"remarks"`
+}
+
+func NewEventFrozenSemenLog(req *FrozenSemenItem) *FrozenSemenLog {
 	return &FrozenSemenLog{
-		BullId:        bullId,
-		CowId:         cow.Id,
-		StallNumberId: stallNumberId,
-		Quantity:      1,
+		BullId:        req.BullId,
+		CowId:         req.CowId,
+		OperationId:   req.OperationId,
+		OperationName: req.OperationName,
+		Quantity:      req.Quantity,
+		MatingAt:      req.MatingAt,
+		Remarks:       req.Remarks,
 	}
 }

+ 44 - 45
module/backend/event_base.go

@@ -74,18 +74,18 @@ func (s *StoreEntry) EnterList(ctx context.Context, req *pasturePb.SearchEventRe
 }
 
 func (s *StoreEntry) CreateEnter(ctx context.Context, req *pasturePb.EventEnterRequest) error {
-	newCowData := model.NewCow(req)
 	currentUser, err := s.GetCurrentSystemUser(ctx)
-	if err != nil {
+	if err != nil || currentUser.Id <= 0 {
 		return xerr.Customf("当前用户信息错误")
 	}
-
+	req.MessengerId = int32(currentUser.Id)
 	req.MessengerName = currentUser.Name
-	if req.MessengerId > 0 {
-		systemUser, _ := s.GetSystemUserById(ctx, int64(req.MessengerId))
+	if req.OperationId > 0 {
+		systemUser, _ := s.GetSystemUserById(ctx, int64(req.OperationId))
 		req.OperationName = systemUser.Name
 	}
 
+	newCowData := model.NewCow(req)
 	newEventEnter := model.NewEventEnter(newCowData.Id, req)
 	if err = s.DB.Transaction(func(tx *gorm.DB) error {
 		if err = tx.Create(newCowData).Error; err != nil {
@@ -138,8 +138,12 @@ func (s *StoreEntry) GroupTransferList(ctx context.Context, req *pasturePb.Searc
 }
 
 func (s *StoreEntry) CreateGroupTransfer(ctx context.Context, req *pasturePb.TransferGroupEventRequest) error {
-	system, _ := s.GetCurrentSystemUser(ctx)
-	res := make([]*model.EventTransferGroup, 0)
+	currentUser, err := s.GetCurrentSystemUser(ctx)
+	if err != nil || currentUser.Id <= 0 {
+		return xerr.Customf("当前用户信息错误")
+	}
+
+	newEventTransferGroupList := make([]*model.EventTransferGroup, 0)
 	for _, v := range req.Body {
 		cow, err := s.GetCowInfoByCowId(ctx, int64(v.CowId))
 		if err != nil {
@@ -149,48 +153,27 @@ func (s *StoreEntry) CreateGroupTransfer(ctx context.Context, req *pasturePb.Tra
 		if cow.PenId == v.TransferInPenId {
 			continue
 		}
-		pen, err := s.GetPenById(ctx, int64(v.TransferInPenId))
+		operationUser, err := s.GetSystemUserById(ctx, int64(v.OperationId))
 		if err != nil {
 			return xerr.WithStack(err)
 		}
-
-		transferReasonData, err := s.GetTransferReasonInfo(ctx, int64(v.TransferReasonId))
-		if err != nil {
-			return xerr.WithStack(err)
-		}
-
-		staffMemberData, err := s.GetSystemUserById(ctx, int64(v.StaffMemberId))
-		if err != nil {
-			return xerr.WithStack(err)
-		}
-
-		res = append(res, &model.EventTransferGroup{
-			CowId:            int64(v.CowId),
-			TransferInPenId:  int64(v.TransferInPenId),
-			TransferOutPenId: pen.Id,
-			Lact:             cow.Lact,
-			DayAge:           cow.GetDayAge(),
-			TransferDate:     v.TransferDate,
-			TransferReasonId: transferReasonData.Id,
-			Remarks:          v.Remarks,
-			StaffMemberId:    staffMemberData.Id,
-			OperationId:      system.Id,
-		})
+		newEventTransferGroup := model.NewEventTransferGroup(cow, v, currentUser, operationUser)
+		newEventTransferGroupList = append(newEventTransferGroupList, newEventTransferGroup)
 	}
-	if len(res) <= 0 {
+	if len(newEventTransferGroupList) <= 0 {
 		return nil
 	}
 
-	if err := s.DB.Transaction(func(tx *gorm.DB) error {
-		if err := tx.Create(res).Error; err != nil {
+	if err = s.DB.Transaction(func(tx *gorm.DB) error {
+		if err = tx.Create(newEventTransferGroupList).Error; err != nil {
 			return xerr.WithStack(err)
 		}
-		for _, v := range res {
+		for _, v := range newEventTransferGroupList {
 			cow, err := s.GetCowInfoByCowId(ctx, v.CowId)
 			if err != nil {
 				return xerr.WithStack(err)
 			}
-			if err = s.DB.Model(cow).Update("pen_id", v.TransferInPenId).Error; err != nil {
+			if err = s.DB.Model(cow).Update("pen_id", v.PenInId).Error; err != nil {
 				return xerr.WithStack(err)
 			}
 		}
@@ -238,21 +221,27 @@ func (s *StoreEntry) CreateBodyScore(ctx context.Context, req *pasturePb.BodySco
 	if len(req.CowId) <= 0 {
 		return xerr.Custom("请选择相关牛只")
 	}
-	currentSystemUser, _ := s.GetCurrentSystemUser(ctx)
+	currentSystemUser, err := s.GetCurrentSystemUser(ctx)
+	if err != nil {
+		return xerr.Customf("获取当前用户失败: %s", err.Error())
+	}
 
-	//cowList := strings.Split(req.CowId, ",")
+	operationUser, err := s.GetSystemUserById(ctx, int64(req.OperationId))
+	if err != nil {
+		return xerr.WithStack(err)
+	}
+	req.OperationName = operationUser.Name
 	bodyScourEvent := make([]*model.EventBodyScore, 0)
 	cowList, err := s.ParseCowIds(ctx, req.CowId)
 	if err != nil {
 		return xerr.WithStack(err)
 	}
 	for _, cow := range cowList {
-		bodyScourEvent = append(bodyScourEvent, model.NewEventBodyScore(cow, currentSystemUser.Id, req))
+		bodyScourEvent = append(bodyScourEvent, model.NewEventBodyScore(cow, currentSystemUser, req))
 	}
 	if len(bodyScourEvent) <= 0 {
 		return nil
 	}
-
 	return s.DB.Create(bodyScourEvent).Error
 }
 
@@ -292,7 +281,11 @@ func (s *StoreEntry) WeightCreate(ctx context.Context, req *pasturePb.EventWeigh
 	if len(req.CowId) <= 0 {
 		return xerr.Custom("请选择相关牛只")
 	}
-	currentSystemUser, _ := s.GetCurrentSystemUser(ctx)
+	currentUser, err := s.GetCurrentSystemUser(ctx)
+	if err != nil {
+		return xerr.Customf("获取当前登录用户失败: %s", err.Error())
+	}
+
 	weightEvent := make([]*model.EventWeight, 0)
 	for _, item := range req.WeightItems {
 		cow, err := s.GetCowInfoByCowId(ctx, int64(item.CowId))
@@ -300,22 +293,28 @@ func (s *StoreEntry) WeightCreate(ctx context.Context, req *pasturePb.EventWeigh
 			return xerr.WithStack(err)
 		}
 		var weight = int32(item.Weight * 100)
-		weightEvent = append(weightEvent, model.NewEventWeight(cow, currentSystemUser, weight, req))
+
+		operationUser, err := s.GetSystemUserById(ctx, int64(req.OperationId))
+		if err != nil {
+			return xerr.WithStack(err)
+		}
+		req.OperationName = operationUser.Name
+		weightEvent = append(weightEvent, model.NewEventWeight(cow, currentUser, weight, req))
 	}
 	if len(weightEvent) <= 0 {
 		return nil
 	}
 
-	if err := s.DB.Transaction(func(tx *gorm.DB) error {
+	if err = s.DB.Transaction(func(tx *gorm.DB) error {
 		for _, item := range weightEvent {
-			if err := tx.Model(new(model.Cow)).Where("id = ?", item.CowId).Updates(map[string]interface{}{
+			if err = tx.Model(new(model.Cow)).Where("id = ?", item.CowId).Updates(map[string]interface{}{
 				"last_weight_at": item.WeightAt,
 				"current_weight": item.Weight,
 			}).Error; err != nil {
 				return xerr.WithStack(err)
 			}
 		}
-		if err := tx.Create(weightEvent).Error; err != nil {
+		if err = tx.Create(weightEvent).Error; err != nil {
 			return xerr.WithStack(err)
 		}
 		return nil

+ 105 - 68
module/backend/event_breed.go

@@ -166,7 +166,7 @@ func (s *StoreEntry) PregnantCheckCreate(ctx context.Context, req *pasturePb.Eve
 	if err != nil {
 		return xerr.WithStack(err)
 	}
-	systemUser, _ := s.GetSystemUserById(ctx, int64(req.StaffMemberId))
+	systemUser, _ := s.GetSystemUserById(ctx, int64(req.OperationId))
 
 	pregnantCheckDay := time.Unix(int64(req.PregnantCheckAt), 0).Format(model.LayoutTime)
 	// 更新怀孕牛只
@@ -323,110 +323,137 @@ func (s *StoreEntry) MatingCreate(ctx context.Context, req *pasturePb.EventMatin
 	if len(req.CowId) <= 0 {
 		return xerr.Custom("请选择相关牛只")
 	}
+
 	cowList, err := s.ParseCowIds(ctx, req.CowId)
 	if err != nil {
 		return xerr.WithStack(err)
 	}
 
-	systemUser, _ := s.GetSystemUserById(ctx, int64(req.StaffMemberId))
-	eventFrozenSemenLogList := make([]*model.FrozenSemenLog, 0)
+	currentUser, err := s.GetCurrentSystemUser(ctx)
+	if err != nil {
+		return xerr.Customf("获取当前用户失败: %s", err.Error())
+	}
+
+	operationUser, err := s.GetSystemUserById(ctx, int64(req.OperationId))
+	if err != nil {
+		return xerr.WithStack(err)
+	}
+
 	frozenSemen := &model.FrozenSemen{}
 	if err = s.DB.Where("bull_id = ?", req.FrozenSemenNumber).First(frozenSemen).Error; err != nil {
 		return xerr.WithStack(err)
 	}
 
-	matingUpdateIds := make([]int64, 0)
+	matingReMatchIds := make([]int64, 0)
+	newMatingList := make([]*model.EventMating, 0)
+	updateMatingList := make([]int64, 0)
+	eventFrozenSemenLogList := make([]*model.FrozenSemenLog, 0)
 	cowIds := make([]int64, 0)
-	nowTime := time.Now()
 	for _, cow := range cowList {
-		var count int64 = 0
-		itemEventMating := &model.EventMating{}
-		if err = s.DB.Where("lact = ?", cow.Lact).
-			Where("cow_id = ?", cow.Id).
-			Order("id desc").
-			First(itemEventMating).Count(&count).Error; err != nil {
-			return xerr.WithStack(err)
+		if cow.Sex != pasturePb.Genders_Female {
+			return xerr.Customf("牛只 %d 不是母牛", cow.Id)
 		}
-
-		// 判断当前输精时间距离上次输精时间是否超过2天,如果超过则更新为复配状态
-		itemBeforeTwoDays := nowTime.Sub(time.Unix(itemEventMating.RealityDay, 0)).Hours()
-		if count > 0 && itemBeforeTwoDays > 48 {
-			matingUpdateIds = append(matingUpdateIds, itemEventMating.Id)
+		// 获取当前牛只最后一次配种时间,判断是否为复配牛只
+		if cow.LastMatingAt <= 0 {
+			// 第一次配种,创建配种信息(自然发情牛只,未经过同期的牛只)
+			newMatingList = append(newMatingList, model.NewEventMating2(cow, req))
+		} else {
+			// 如何两次配种时间为连续两天,则更新为复配状态
+			lastMatingAt := time.Unix(cow.LastMatingAt, 0).AddDate(0, 0, 1).Format(model.LayoutDate2)
+			currentMatingAt := time.Unix(int64(req.MatingAt), 0).Format(model.LayoutDate2)
+			if cow.LastMatingAt != int64(req.MatingAt) && lastMatingAt == currentMatingAt {
+				matingReMatchIds = append(matingReMatchIds, cow.Id)
+			} else {
+				updateMatingList = append(updateMatingList, cow.Id)
+			}
 		}
-
-		eventFrozenSemenLogList = append(
-			eventFrozenSemenLogList,
-			model.NewEventFrozenSemenLog(req.FrozenSemenNumber, cow, int64(req.StaffMemberId)),
-		)
-
+		newFrozenSemenItem := &model.FrozenSemenItem{
+			CowId:         cow.Id,
+			Quantity:      req.FrozenSemenCount,
+			MatingAt:      int64(req.MatingAt),
+			OperationId:   operationUser.Id,
+			OperationName: operationUser.Name,
+			BullId:        req.FrozenSemenNumber,
+			Remarks:       req.Remarks,
+		}
+		itemFrozenSemenLog := model.NewEventFrozenSemenLog(newFrozenSemenItem)
+		eventFrozenSemenLogList = append(eventFrozenSemenLogList, itemFrozenSemenLog)
 		cowIds = append(cowIds, cow.Id)
 	}
 
 	if err = s.DB.Transaction(func(tx *gorm.DB) error {
-		if len(cowIds) > 0 {
-			// 如果有同期牛只,则修改为已结束状态
-			if err = tx.Table(new(model.CowSameTime).TableName()).
-				Where("cow_id IN ?", cowIds).
-				UpdateColumn("status", pasturePb.SameTimeStatus_End).Error; err != nil {
-			}
-
+		if len(updateMatingList) > 0 {
 			// 创建配种事件数据
 			if err = tx.Model(new(model.EventMating)).
-				Where("cow_id IN ?", cowIds).
+				Where("cow_id IN ?", updateMatingList).
+				Where("status = ?", pasturePb.IsShow_No).
 				Updates(map[string]interface{}{
 					"mating_result":       pasturePb.MatingResult_Unknown,
 					"status":              pasturePb.IsShow_Ok,
 					"reality_day":         time.Unix(int64(req.MatingAt), 0).Format(model.LayoutTime),
-					"mating_number":       req.FrozenSemenCount,
+					"frozen_semen_count":  1,
 					"frozen_semen_number": req.FrozenSemenNumber,
-					"operation_id":        req.StaffMemberId,
-					"operation_name":      systemUser.Name,
-				}).
-				Error; err != nil {
+					"operation_id":        operationUser.Id,
+					"operation_name":      operationUser.Name,
+					"message_id":          currentUser.Id,
+					"message_name":        currentUser.Name,
+				}).Error; err != nil {
 				return xerr.WithStack(err)
 			}
 		}
 
 		// 更新已配种的牛只为复配状态
-		if len(matingUpdateIds) > 0 {
+		if len(matingReMatchIds) > 0 {
 			if err = tx.Model(new(model.EventMating)).
-				Where("id IN ?", matingUpdateIds).
+				Where("id IN ?", matingReMatchIds).
 				Where("mating_result = ?", pasturePb.MatingResult_Unknown).
-				Updates(map[string]interface{}{
-					"mating_result":       pasturePb.MatingResult_ReMatch,
-					"mating_number":       2,
-					"frozen_semen_number": req.FrozenSemenNumber,
-				}).
+				Where("status = ?", pasturePb.IsShow_Ok).
+				Update("mating_result", pasturePb.MatingResult_ReMatch).
 				Error; err != nil {
 				return xerr.WithStack(err)
 			}
 		}
 
+		// 创建配种事件数据
+		if len(newMatingList) > 0 {
+			if err = tx.Create(newMatingList).Error; err != nil {
+				return xerr.WithStack(err)
+			}
+		}
+
 		// 创建冻精使用记录日志
 		if err = tx.Create(eventFrozenSemenLogList).Error; err != nil {
 			return xerr.WithStack(err)
 		}
+		// 更新牛只的繁殖状态为配种
+		if len(cowIds) > 0 {
+			// 如果有同期牛只,则修改为已结束状态
+			if err = tx.Table(new(model.CowSameTime).TableName()).
+				Where("cow_id IN ?", cowIds).
+				UpdateColumn("status", pasturePb.SameTimeStatus_End).Error; err != nil {
+			}
 
-		// 减去精液的数量
-		if err = tx.Model(new(model.FrozenSemen)).
-			Where("id = ?", frozenSemen.Id).
-			Where("quantity > 0").
-			UpdateColumn("quantity",
-				gorm.Expr("quantity - ?", len(matingUpdateIds)),
-			).Error; err != nil {
-			return xerr.WithStack(err)
-		}
+			if err = tx.Model(new(model.Cow)).
+				Where("id IN ?", cowIds).
+				Where("admission_status = ?", pasturePb.AdmissionStatus_Admission).
+				Updates(map[string]interface{}{
+					"breed_status":     pasturePb.BreedStatus_Breeding,
+					"last_bull_number": req.FrozenSemenNumber,
+					"last_mating_at":   int64(req.MatingAt),
+				}).Error; err != nil {
+				return xerr.WithStack(err)
+			}
 
-		if err = tx.Table(new(model.Cow).TableName()).
-			Where("id IN ?", cowIds).
-			Updates(map[string]interface{}{
-				"breed_status":     pasturePb.BreedStatus_Breeding,
-				"last_bull_number": req.FrozenSemenNumber,
-				"last_mating_at":   int64(req.MatingAt),
-			}).Error; err != nil {
-			return xerr.WithStack(err)
+			// 减去精液的数量
+			if err = tx.Model(new(model.FrozenSemen)).
+				Where("id = ?", frozenSemen.Id).
+				Where("quantity > 0").
+				UpdateColumn("quantity",
+					gorm.Expr("quantity - ?", req.FrozenSemenCount),
+				).Error; err != nil {
+				return xerr.WithStack(err)
+			}
 		}
-
 		return nil
 	}); err != nil {
 		return xerr.WithStack(err)
@@ -451,12 +478,11 @@ func (s *StoreEntry) EstrusList(ctx context.Context, req *pasturePb.SearchEventR
 		return nil, xerr.WithStack(err)
 	}
 
-	systemUserList, _ := s.SystemUserList(ctx)
 	return &pasturePb.EstrusEventResponse{
 		Code:    http.StatusOK,
 		Message: "ok",
 		Data: &pasturePb.SearchEstrusData{
-			List:     model.EstrusSlice(estrusList).ToPB(systemUserList),
+			List:     model.EstrusSlice(estrusList).ToPB(),
 			Total:    int32(count),
 			PageSize: pagination.PageSize,
 			Page:     pagination.Page,
@@ -473,13 +499,21 @@ func (s *StoreEntry) EstrusCreate(ctx context.Context, req *pasturePb.EventEstru
 		return xerr.WithStack(err)
 	}
 	estrusList := make([]*model.EventEstrus, 0)
-	currentUser, _ := s.GetCurrentSystemUser(ctx)
+	currentUser, err := s.GetCurrentSystemUser(ctx)
+	if err != nil {
+		return xerr.Custom("获取当前登录用户失败")
+	}
 
 	for _, cow := range cowList {
+		operationUser, err := s.GetSystemUserById(ctx, int64(req.OperationId))
+		if err != nil {
+			return xerr.WithStack(err)
+		}
+		req.OperationName = operationUser.Name
 		estrusList = append(estrusList, model.NewEventEstrus(cow, currentUser, req))
 	}
 
-	if err := s.DB.Create(estrusList).Error; err != nil {
+	if err = s.DB.Create(estrusList).Error; err != nil {
 		return xerr.WithStack(err)
 	}
 	return nil
@@ -549,7 +583,10 @@ func (s *StoreEntry) SameTimeCreate(ctx context.Context, req *pasturePb.EventSam
 			return xerr.WithStack(err)
 		}
 	}
-	systemUser, _ := s.GetSystemUserById(ctx, int64(req.StaffMemberId))
+	operationUser, err := s.GetSystemUserById(ctx, int64(req.OperationId))
+	if err != nil {
+		return xerr.WithStack(err)
+	}
 
 	if err = s.DB.Transaction(func(tx *gorm.DB) error {
 		if err = tx.Model(new(model.CowSameTime)).
@@ -569,8 +606,8 @@ func (s *StoreEntry) SameTimeCreate(ctx context.Context, req *pasturePb.EventSam
 				"unit":           drugs.Unit,
 				"usage":          req.Usage,
 				"remarks":        req.Remarks,
-				"operation_id":   req.StaffMemberId,
-				"operation_name": systemUser.Name,
+				"operation_id":   operationUser.Id,
+				"operation_name": operationUser.Name,
 			}).Error; err != nil {
 			return xerr.WithStack(err)
 		}

+ 1759 - 0
module/backend/mock/kptservice.go

@@ -0,0 +1,1759 @@
+// Code generated by MockGen. DO NOT EDIT.
+// Source: kpt-pasture/module/backend (interfaces: KptService)
+
+// Package kptservicemock is a generated GoMock package.
+package kptservicemock
+
+import (
+	context "context"
+	model "kpt-pasture/model"
+	reflect "reflect"
+
+	cowPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
+	gomock "github.com/golang/mock/gomock"
+)
+
+// MockKptService is a mock of KptService interface.
+type MockKptService struct {
+	ctrl     *gomock.Controller
+	recorder *MockKptServiceMockRecorder
+}
+
+// MockKptServiceMockRecorder is the mock recorder for MockKptService.
+type MockKptServiceMockRecorder struct {
+	mock *MockKptService
+}
+
+// NewMockKptService creates a new mock instance.
+func NewMockKptService(ctrl *gomock.Controller) *MockKptService {
+	mock := &MockKptService{ctrl: ctrl}
+	mock.recorder = &MockKptServiceMockRecorder{mock}
+	return mock
+}
+
+// EXPECT returns an object that allows the caller to indicate expected use.
+func (m *MockKptService) EXPECT() *MockKptServiceMockRecorder {
+	return m.recorder
+}
+
+// AbortionCreate mocks base method.
+func (m *MockKptService) AbortionCreate(arg0 context.Context, arg1 *cowPb.EventAbortionRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "AbortionCreate", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// AbortionCreate indicates an expected call of AbortionCreate.
+func (mr *MockKptServiceMockRecorder) AbortionCreate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AbortionCreate", reflect.TypeOf((*MockKptService)(nil).AbortionCreate), arg0, arg1)
+}
+
+// AbortionCreateSlice mocks base method.
+func (m *MockKptService) AbortionCreateSlice(arg0 context.Context, arg1 *cowPb.EventAbortionSlice) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "AbortionCreateSlice", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// AbortionCreateSlice indicates an expected call of AbortionCreateSlice.
+func (mr *MockKptServiceMockRecorder) AbortionCreateSlice(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AbortionCreateSlice", reflect.TypeOf((*MockKptService)(nil).AbortionCreateSlice), arg0, arg1)
+}
+
+// AbortionList mocks base method.
+func (m *MockKptService) AbortionList(arg0 context.Context, arg1 *cowPb.SearchEventRequest, arg2 *cowPb.PaginationModel) (*cowPb.EventAbortionResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "AbortionList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.EventAbortionResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// AbortionList indicates an expected call of AbortionList.
+func (mr *MockKptServiceMockRecorder) AbortionList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AbortionList", reflect.TypeOf((*MockKptService)(nil).AbortionList), arg0, arg1, arg2)
+}
+
+// AbortionRate mocks base method.
+func (m *MockKptService) AbortionRate(arg0 context.Context, arg1 *cowPb.AbortionRateRequest) (*cowPb.AbortionRateResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "AbortionRate", arg0, arg1)
+	ret0, _ := ret[0].(*cowPb.AbortionRateResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// AbortionRate indicates an expected call of AbortionRate.
+func (mr *MockKptServiceMockRecorder) AbortionRate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AbortionRate", reflect.TypeOf((*MockKptService)(nil).AbortionRate), arg0, arg1)
+}
+
+// Bar mocks base method.
+func (m *MockKptService) Bar(arg0 context.Context) (*cowPb.BarCowStructResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "Bar", arg0)
+	ret0, _ := ret[0].(*cowPb.BarCowStructResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// Bar indicates an expected call of Bar.
+func (mr *MockKptServiceMockRecorder) Bar(arg0 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Bar", reflect.TypeOf((*MockKptService)(nil).Bar), arg0)
+}
+
+// BarnListOptions mocks base method.
+func (m *MockKptService) BarnListOptions(arg0 context.Context, arg1 int, arg2 string) (*cowPb.ConfigOptionsListResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "BarnListOptions", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.ConfigOptionsListResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// BarnListOptions indicates an expected call of BarnListOptions.
+func (mr *MockKptServiceMockRecorder) BarnListOptions(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BarnListOptions", reflect.TypeOf((*MockKptService)(nil).BarnListOptions), arg0, arg1, arg2)
+}
+
+// BarnTypeOptions mocks base method.
+func (m *MockKptService) BarnTypeOptions(arg0 context.Context) (*cowPb.ConfigOptionsListResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "BarnTypeOptions", arg0)
+	ret0, _ := ret[0].(*cowPb.ConfigOptionsListResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// BarnTypeOptions indicates an expected call of BarnTypeOptions.
+func (mr *MockKptServiceMockRecorder) BarnTypeOptions(arg0 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BarnTypeOptions", reflect.TypeOf((*MockKptService)(nil).BarnTypeOptions), arg0)
+}
+
+// BodyScoreList mocks base method.
+func (m *MockKptService) BodyScoreList(arg0 context.Context, arg1 *cowPb.SearchEventRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchBodyScoreEventResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "BodyScoreList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchBodyScoreEventResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// BodyScoreList indicates an expected call of BodyScoreList.
+func (mr *MockKptServiceMockRecorder) BodyScoreList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BodyScoreList", reflect.TypeOf((*MockKptService)(nil).BodyScoreList), arg0, arg1, arg2)
+}
+
+// BreedStatusOptions mocks base method.
+func (m *MockKptService) BreedStatusOptions(arg0 context.Context) (*cowPb.ConfigOptionsListResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "BreedStatusOptions", arg0)
+	ret0, _ := ret[0].(*cowPb.ConfigOptionsListResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// BreedStatusOptions indicates an expected call of BreedStatusOptions.
+func (mr *MockKptServiceMockRecorder) BreedStatusOptions(arg0 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BreedStatusOptions", reflect.TypeOf((*MockKptService)(nil).BreedStatusOptions), arg0)
+}
+
+// BullOptions mocks base method.
+func (m *MockKptService) BullOptions(arg0 context.Context) (*cowPb.BullOptionsListResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "BullOptions", arg0)
+	ret0, _ := ret[0].(*cowPb.BullOptionsListResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// BullOptions indicates an expected call of BullOptions.
+func (mr *MockKptServiceMockRecorder) BullOptions(arg0 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BullOptions", reflect.TypeOf((*MockKptService)(nil).BullOptions), arg0)
+}
+
+// CalendarList mocks base method.
+func (m *MockKptService) CalendarList(arg0 context.Context, arg1 *cowPb.CalendarRequest) (*cowPb.CalendarResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CalendarList", arg0, arg1)
+	ret0, _ := ret[0].(*cowPb.CalendarResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CalendarList indicates an expected call of CalendarList.
+func (mr *MockKptServiceMockRecorder) CalendarList(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CalendarList", reflect.TypeOf((*MockKptService)(nil).CalendarList), arg0, arg1)
+}
+
+// CalendarTableDetail mocks base method.
+func (m *MockKptService) CalendarTableDetail(arg0 context.Context, arg1 *cowPb.CalendarTableRequest, arg2 *cowPb.PaginationModel) (interface{}, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CalendarTableDetail", arg0, arg1, arg2)
+	ret0, _ := ret[0].(interface{})
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CalendarTableDetail indicates an expected call of CalendarTableDetail.
+func (mr *MockKptServiceMockRecorder) CalendarTableDetail(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CalendarTableDetail", reflect.TypeOf((*MockKptService)(nil).CalendarTableDetail), arg0, arg1, arg2)
+}
+
+// CalendarToDoList mocks base method.
+func (m *MockKptService) CalendarToDoList(arg0 context.Context, arg1 *cowPb.CalendarToDoRequest, arg2 *cowPb.PaginationModel) (*cowPb.CalendarToDoResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CalendarToDoList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.CalendarToDoResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CalendarToDoList indicates an expected call of CalendarToDoList.
+func (mr *MockKptServiceMockRecorder) CalendarToDoList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CalendarToDoList", reflect.TypeOf((*MockKptService)(nil).CalendarToDoList), arg0, arg1, arg2)
+}
+
+// CalvingCreate mocks base method.
+func (m *MockKptService) CalvingCreate(arg0 context.Context, arg1 *cowPb.EventCalving) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CalvingCreate", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CalvingCreate indicates an expected call of CalvingCreate.
+func (mr *MockKptServiceMockRecorder) CalvingCreate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CalvingCreate", reflect.TypeOf((*MockKptService)(nil).CalvingCreate), arg0, arg1)
+}
+
+// CalvingList mocks base method.
+func (m *MockKptService) CalvingList(arg0 context.Context, arg1 *cowPb.SearchEventRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchLavingEventResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CalvingList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchLavingEventResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CalvingList indicates an expected call of CalvingList.
+func (mr *MockKptServiceMockRecorder) CalvingList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CalvingList", reflect.TypeOf((*MockKptService)(nil).CalvingList), arg0, arg1, arg2)
+}
+
+// CalvingReport mocks base method.
+func (m *MockKptService) CalvingReport(arg0 context.Context, arg1 *cowPb.CalvingReportRequest) (*cowPb.CalvingReportResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CalvingReport", arg0, arg1)
+	ret0, _ := ret[0].(*cowPb.CalvingReportResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CalvingReport indicates an expected call of CalvingReport.
+func (mr *MockKptServiceMockRecorder) CalvingReport(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CalvingReport", reflect.TypeOf((*MockKptService)(nil).CalvingReport), arg0, arg1)
+}
+
+// CowDiseaseCreate mocks base method.
+func (m *MockKptService) CowDiseaseCreate(arg0 context.Context, arg1 *cowPb.EventCowDiseaseRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CowDiseaseCreate", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CowDiseaseCreate indicates an expected call of CowDiseaseCreate.
+func (mr *MockKptServiceMockRecorder) CowDiseaseCreate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CowDiseaseCreate", reflect.TypeOf((*MockKptService)(nil).CowDiseaseCreate), arg0, arg1)
+}
+
+// CowDiseaseCurable mocks base method.
+func (m *MockKptService) CowDiseaseCurable(arg0 context.Context, arg1 *cowPb.EventCowCurableRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CowDiseaseCurable", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CowDiseaseCurable indicates an expected call of CowDiseaseCurable.
+func (mr *MockKptServiceMockRecorder) CowDiseaseCurable(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CowDiseaseCurable", reflect.TypeOf((*MockKptService)(nil).CowDiseaseCurable), arg0, arg1)
+}
+
+// CowDiseaseDiagnose mocks base method.
+func (m *MockKptService) CowDiseaseDiagnose(arg0 context.Context, arg1 *cowPb.CowDiagnosedRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CowDiseaseDiagnose", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CowDiseaseDiagnose indicates an expected call of CowDiseaseDiagnose.
+func (mr *MockKptServiceMockRecorder) CowDiseaseDiagnose(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CowDiseaseDiagnose", reflect.TypeOf((*MockKptService)(nil).CowDiseaseDiagnose), arg0, arg1)
+}
+
+// CowDiseaseList mocks base method.
+func (m *MockKptService) CowDiseaseList(arg0 context.Context, arg1 *cowPb.SearchEventCowTreatmentRequest, arg2 *cowPb.PaginationModel) (*cowPb.EventCowDiseaseResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CowDiseaseList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.EventCowDiseaseResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CowDiseaseList indicates an expected call of CowDiseaseList.
+func (mr *MockKptServiceMockRecorder) CowDiseaseList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CowDiseaseList", reflect.TypeOf((*MockKptService)(nil).CowDiseaseList), arg0, arg1, arg2)
+}
+
+// CowDiseaseTreatment mocks base method.
+func (m *MockKptService) CowDiseaseTreatment(arg0 context.Context, arg1 *cowPb.CowTreatmentRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CowDiseaseTreatment", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CowDiseaseTreatment indicates an expected call of CowDiseaseTreatment.
+func (mr *MockKptServiceMockRecorder) CowDiseaseTreatment(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CowDiseaseTreatment", reflect.TypeOf((*MockKptService)(nil).CowDiseaseTreatment), arg0, arg1)
+}
+
+// CowDiseaseTreatmentDetail mocks base method.
+func (m *MockKptService) CowDiseaseTreatmentDetail(arg0 context.Context, arg1 *cowPb.EventCowTreatmentDetailRequest, arg2 *cowPb.PaginationModel) (*cowPb.EventCowTreatmentDetailResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CowDiseaseTreatmentDetail", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.EventCowTreatmentDetailResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CowDiseaseTreatmentDetail indicates an expected call of CowDiseaseTreatmentDetail.
+func (mr *MockKptServiceMockRecorder) CowDiseaseTreatmentDetail(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CowDiseaseTreatmentDetail", reflect.TypeOf((*MockKptService)(nil).CowDiseaseTreatmentDetail), arg0, arg1, arg2)
+}
+
+// CowKindOptions mocks base method.
+func (m *MockKptService) CowKindOptions(arg0 context.Context) (*cowPb.ConfigOptionsListResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CowKindOptions", arg0)
+	ret0, _ := ret[0].(*cowPb.ConfigOptionsListResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CowKindOptions indicates an expected call of CowKindOptions.
+func (mr *MockKptServiceMockRecorder) CowKindOptions(arg0 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CowKindOptions", reflect.TypeOf((*MockKptService)(nil).CowKindOptions), arg0)
+}
+
+// CowList mocks base method.
+func (m *MockKptService) CowList(arg0 context.Context, arg1 *cowPb.SearchEventRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchCowListResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CowList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchCowListResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CowList indicates an expected call of CowList.
+func (mr *MockKptServiceMockRecorder) CowList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CowList", reflect.TypeOf((*MockKptService)(nil).CowList), arg0, arg1, arg2)
+}
+
+// CowSourceOptions mocks base method.
+func (m *MockKptService) CowSourceOptions(arg0 context.Context) (*cowPb.ConfigOptionsListResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CowSourceOptions", arg0)
+	ret0, _ := ret[0].(*cowPb.ConfigOptionsListResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CowSourceOptions indicates an expected call of CowSourceOptions.
+func (mr *MockKptServiceMockRecorder) CowSourceOptions(arg0 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CowSourceOptions", reflect.TypeOf((*MockKptService)(nil).CowSourceOptions), arg0)
+}
+
+// CowTransferPenReasonOptions mocks base method.
+func (m *MockKptService) CowTransferPenReasonOptions(arg0 context.Context) (*cowPb.ConfigOptionsListResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CowTransferPenReasonOptions", arg0)
+	ret0, _ := ret[0].(*cowPb.ConfigOptionsListResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CowTransferPenReasonOptions indicates an expected call of CowTransferPenReasonOptions.
+func (mr *MockKptServiceMockRecorder) CowTransferPenReasonOptions(arg0 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CowTransferPenReasonOptions", reflect.TypeOf((*MockKptService)(nil).CowTransferPenReasonOptions), arg0)
+}
+
+// CowTypeOptions mocks base method.
+func (m *MockKptService) CowTypeOptions(arg0 context.Context, arg1, arg2 string) (*cowPb.ConfigOptionsListResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CowTypeOptions", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.ConfigOptionsListResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// CowTypeOptions indicates an expected call of CowTypeOptions.
+func (mr *MockKptServiceMockRecorder) CowTypeOptions(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CowTypeOptions", reflect.TypeOf((*MockKptService)(nil).CowTypeOptions), arg0, arg1, arg2)
+}
+
+// CreateBodyScore mocks base method.
+func (m *MockKptService) CreateBodyScore(arg0 context.Context, arg1 *cowPb.BodyScoreEventRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateBodyScore", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreateBodyScore indicates an expected call of CreateBodyScore.
+func (mr *MockKptServiceMockRecorder) CreateBodyScore(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateBodyScore", reflect.TypeOf((*MockKptService)(nil).CreateBodyScore), arg0, arg1)
+}
+
+// CreateEnter mocks base method.
+func (m *MockKptService) CreateEnter(arg0 context.Context, arg1 *cowPb.EventEnterRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateEnter", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreateEnter indicates an expected call of CreateEnter.
+func (mr *MockKptServiceMockRecorder) CreateEnter(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateEnter", reflect.TypeOf((*MockKptService)(nil).CreateEnter), arg0, arg1)
+}
+
+// CreateGroupTransfer mocks base method.
+func (m *MockKptService) CreateGroupTransfer(arg0 context.Context, arg1 *cowPb.TransferGroupEventRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateGroupTransfer", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreateGroupTransfer indicates an expected call of CreateGroupTransfer.
+func (mr *MockKptServiceMockRecorder) CreateGroupTransfer(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateGroupTransfer", reflect.TypeOf((*MockKptService)(nil).CreateGroupTransfer), arg0, arg1)
+}
+
+// CreateOrUpdateBarn mocks base method.
+func (m *MockKptService) CreateOrUpdateBarn(arg0 context.Context, arg1 *cowPb.SearchBarnList) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateOrUpdateBarn", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreateOrUpdateBarn indicates an expected call of CreateOrUpdateBarn.
+func (mr *MockKptServiceMockRecorder) CreateOrUpdateBarn(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdateBarn", reflect.TypeOf((*MockKptService)(nil).CreateOrUpdateBarn), arg0, arg1)
+}
+
+// CreateOrUpdateBarnType mocks base method.
+func (m *MockKptService) CreateOrUpdateBarnType(arg0 context.Context, arg1 *cowPb.SearchBaseConfigList) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateOrUpdateBarnType", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreateOrUpdateBarnType indicates an expected call of CreateOrUpdateBarnType.
+func (mr *MockKptServiceMockRecorder) CreateOrUpdateBarnType(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdateBarnType", reflect.TypeOf((*MockKptService)(nil).CreateOrUpdateBarnType), arg0, arg1)
+}
+
+// CreateOrUpdateBreedStatus mocks base method.
+func (m *MockKptService) CreateOrUpdateBreedStatus(arg0 context.Context, arg1 *cowPb.SearchBaseConfigList) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateOrUpdateBreedStatus", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreateOrUpdateBreedStatus indicates an expected call of CreateOrUpdateBreedStatus.
+func (mr *MockKptServiceMockRecorder) CreateOrUpdateBreedStatus(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdateBreedStatus", reflect.TypeOf((*MockKptService)(nil).CreateOrUpdateBreedStatus), arg0, arg1)
+}
+
+// CreateOrUpdateCowKind mocks base method.
+func (m *MockKptService) CreateOrUpdateCowKind(arg0 context.Context, arg1 *cowPb.SearchBaseConfigList) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateOrUpdateCowKind", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreateOrUpdateCowKind indicates an expected call of CreateOrUpdateCowKind.
+func (mr *MockKptServiceMockRecorder) CreateOrUpdateCowKind(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdateCowKind", reflect.TypeOf((*MockKptService)(nil).CreateOrUpdateCowKind), arg0, arg1)
+}
+
+// CreateOrUpdateCowSource mocks base method.
+func (m *MockKptService) CreateOrUpdateCowSource(arg0 context.Context, arg1 *cowPb.SearchBaseConfigList) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateOrUpdateCowSource", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreateOrUpdateCowSource indicates an expected call of CreateOrUpdateCowSource.
+func (mr *MockKptServiceMockRecorder) CreateOrUpdateCowSource(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdateCowSource", reflect.TypeOf((*MockKptService)(nil).CreateOrUpdateCowSource), arg0, arg1)
+}
+
+// CreateOrUpdateCowStatus mocks base method.
+func (m *MockKptService) CreateOrUpdateCowStatus(arg0 context.Context, arg1 *cowPb.SearchBaseConfigList) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateOrUpdateCowStatus", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreateOrUpdateCowStatus indicates an expected call of CreateOrUpdateCowStatus.
+func (mr *MockKptServiceMockRecorder) CreateOrUpdateCowStatus(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdateCowStatus", reflect.TypeOf((*MockKptService)(nil).CreateOrUpdateCowStatus), arg0, arg1)
+}
+
+// CreateOrUpdateCowType mocks base method.
+func (m *MockKptService) CreateOrUpdateCowType(arg0 context.Context, arg1 *cowPb.SearchBaseConfigList) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateOrUpdateCowType", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreateOrUpdateCowType indicates an expected call of CreateOrUpdateCowType.
+func (mr *MockKptServiceMockRecorder) CreateOrUpdateCowType(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdateCowType", reflect.TypeOf((*MockKptService)(nil).CreateOrUpdateCowType), arg0, arg1)
+}
+
+// CreateOrUpdateDisease mocks base method.
+func (m *MockKptService) CreateOrUpdateDisease(arg0 context.Context, arg1 *cowPb.SearchDiseaseList) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateOrUpdateDisease", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreateOrUpdateDisease indicates an expected call of CreateOrUpdateDisease.
+func (mr *MockKptServiceMockRecorder) CreateOrUpdateDisease(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdateDisease", reflect.TypeOf((*MockKptService)(nil).CreateOrUpdateDisease), arg0, arg1)
+}
+
+// CreateOrUpdateDiseaseType mocks base method.
+func (m *MockKptService) CreateOrUpdateDiseaseType(arg0 context.Context, arg1 *cowPb.SearchBaseConfigList) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateOrUpdateDiseaseType", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreateOrUpdateDiseaseType indicates an expected call of CreateOrUpdateDiseaseType.
+func (mr *MockKptServiceMockRecorder) CreateOrUpdateDiseaseType(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdateDiseaseType", reflect.TypeOf((*MockKptService)(nil).CreateOrUpdateDiseaseType), arg0, arg1)
+}
+
+// CreateOrUpdatePrescription mocks base method.
+func (m *MockKptService) CreateOrUpdatePrescription(arg0 context.Context, arg1 *cowPb.PrescriptionRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateOrUpdatePrescription", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreateOrUpdatePrescription indicates an expected call of CreateOrUpdatePrescription.
+func (mr *MockKptServiceMockRecorder) CreateOrUpdatePrescription(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdatePrescription", reflect.TypeOf((*MockKptService)(nil).CreateOrUpdatePrescription), arg0, arg1)
+}
+
+// CreateOrUpdateSameTime mocks base method.
+func (m *MockKptService) CreateOrUpdateSameTime(arg0 context.Context, arg1 *cowPb.SearchSameTimeList) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateOrUpdateSameTime", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreateOrUpdateSameTime indicates an expected call of CreateOrUpdateSameTime.
+func (mr *MockKptServiceMockRecorder) CreateOrUpdateSameTime(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdateSameTime", reflect.TypeOf((*MockKptService)(nil).CreateOrUpdateSameTime), arg0, arg1)
+}
+
+// CreateOrUpdateSystemMenu mocks base method.
+func (m *MockKptService) CreateOrUpdateSystemMenu(arg0 context.Context, arg1 *cowPb.SearchMenuRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateOrUpdateSystemMenu", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreateOrUpdateSystemMenu indicates an expected call of CreateOrUpdateSystemMenu.
+func (mr *MockKptServiceMockRecorder) CreateOrUpdateSystemMenu(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdateSystemMenu", reflect.TypeOf((*MockKptService)(nil).CreateOrUpdateSystemMenu), arg0, arg1)
+}
+
+// CreateOrUpdateTransferPenReason mocks base method.
+func (m *MockKptService) CreateOrUpdateTransferPenReason(arg0 context.Context, arg1 *cowPb.SearchBaseConfigList) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreateOrUpdateTransferPenReason", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreateOrUpdateTransferPenReason indicates an expected call of CreateOrUpdateTransferPenReason.
+func (mr *MockKptServiceMockRecorder) CreateOrUpdateTransferPenReason(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdateTransferPenReason", reflect.TypeOf((*MockKptService)(nil).CreateOrUpdateTransferPenReason), arg0, arg1)
+}
+
+// CreatedOrUpdateImmunization mocks base method.
+func (m *MockKptService) CreatedOrUpdateImmunization(arg0 context.Context, arg1 *cowPb.ImmunizationRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "CreatedOrUpdateImmunization", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// CreatedOrUpdateImmunization indicates an expected call of CreatedOrUpdateImmunization.
+func (mr *MockKptServiceMockRecorder) CreatedOrUpdateImmunization(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreatedOrUpdateImmunization", reflect.TypeOf((*MockKptService)(nil).CreatedOrUpdateImmunization), arg0, arg1)
+}
+
+// DeleteSystemMenu mocks base method.
+func (m *MockKptService) DeleteSystemMenu(arg0 context.Context, arg1 int64) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "DeleteSystemMenu", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// DeleteSystemMenu indicates an expected call of DeleteSystemMenu.
+func (mr *MockKptServiceMockRecorder) DeleteSystemMenu(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteSystemMenu", reflect.TypeOf((*MockKptService)(nil).DeleteSystemMenu), arg0, arg1)
+}
+
+// DeleteSystemRole mocks base method.
+func (m *MockKptService) DeleteSystemRole(arg0 context.Context, arg1 int64) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "DeleteSystemRole", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// DeleteSystemRole indicates an expected call of DeleteSystemRole.
+func (mr *MockKptServiceMockRecorder) DeleteSystemRole(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteSystemRole", reflect.TypeOf((*MockKptService)(nil).DeleteSystemRole), arg0, arg1)
+}
+
+// DeleteSystemUser mocks base method.
+func (m *MockKptService) DeleteSystemUser(arg0 context.Context, arg1 int64) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "DeleteSystemUser", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// DeleteSystemUser indicates an expected call of DeleteSystemUser.
+func (mr *MockKptServiceMockRecorder) DeleteSystemUser(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteSystemUser", reflect.TypeOf((*MockKptService)(nil).DeleteSystemUser), arg0, arg1)
+}
+
+// DiseaseCureReport mocks base method.
+func (m *MockKptService) DiseaseCureReport(arg0 context.Context, arg1 *cowPb.DiseaseCureRateRequest) (*cowPb.DiseaseCureRateResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "DiseaseCureReport", arg0, arg1)
+	ret0, _ := ret[0].(*cowPb.DiseaseCureRateResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// DiseaseCureReport indicates an expected call of DiseaseCureReport.
+func (mr *MockKptServiceMockRecorder) DiseaseCureReport(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DiseaseCureReport", reflect.TypeOf((*MockKptService)(nil).DiseaseCureReport), arg0, arg1)
+}
+
+// DiseaseOptions mocks base method.
+func (m *MockKptService) DiseaseOptions(arg0 context.Context) (*cowPb.ConfigOptionsListResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "DiseaseOptions", arg0)
+	ret0, _ := ret[0].(*cowPb.ConfigOptionsListResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// DiseaseOptions indicates an expected call of DiseaseOptions.
+func (mr *MockKptServiceMockRecorder) DiseaseOptions(arg0 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DiseaseOptions", reflect.TypeOf((*MockKptService)(nil).DiseaseOptions), arg0)
+}
+
+// DiseaseTypeOptions mocks base method.
+func (m *MockKptService) DiseaseTypeOptions(arg0 context.Context, arg1 string) (*cowPb.ConfigOptionsListResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "DiseaseTypeOptions", arg0, arg1)
+	ret0, _ := ret[0].(*cowPb.ConfigOptionsListResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// DiseaseTypeOptions indicates an expected call of DiseaseTypeOptions.
+func (mr *MockKptServiceMockRecorder) DiseaseTypeOptions(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DiseaseTypeOptions", reflect.TypeOf((*MockKptService)(nil).DiseaseTypeOptions), arg0, arg1)
+}
+
+// DrugsCreateOrUpdate mocks base method.
+func (m *MockKptService) DrugsCreateOrUpdate(arg0 context.Context, arg1 *cowPb.SearchDrugsList) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "DrugsCreateOrUpdate", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// DrugsCreateOrUpdate indicates an expected call of DrugsCreateOrUpdate.
+func (mr *MockKptServiceMockRecorder) DrugsCreateOrUpdate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DrugsCreateOrUpdate", reflect.TypeOf((*MockKptService)(nil).DrugsCreateOrUpdate), arg0, arg1)
+}
+
+// DrugsList mocks base method.
+func (m *MockKptService) DrugsList(arg0 context.Context, arg1 *cowPb.SearchDrugsRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchDrugsResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "DrugsList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchDrugsResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// DrugsList indicates an expected call of DrugsList.
+func (mr *MockKptServiceMockRecorder) DrugsList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DrugsList", reflect.TypeOf((*MockKptService)(nil).DrugsList), arg0, arg1, arg2)
+}
+
+// EnterList mocks base method.
+func (m *MockKptService) EnterList(arg0 context.Context, arg1 *cowPb.SearchEventRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchEnterEventResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "EnterList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchEnterEventResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// EnterList indicates an expected call of EnterList.
+func (mr *MockKptServiceMockRecorder) EnterList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnterList", reflect.TypeOf((*MockKptService)(nil).EnterList), arg0, arg1, arg2)
+}
+
+// EstrusCreate mocks base method.
+func (m *MockKptService) EstrusCreate(arg0 context.Context, arg1 *cowPb.EventEstrus) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "EstrusCreate", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// EstrusCreate indicates an expected call of EstrusCreate.
+func (mr *MockKptServiceMockRecorder) EstrusCreate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EstrusCreate", reflect.TypeOf((*MockKptService)(nil).EstrusCreate), arg0, arg1)
+}
+
+// EstrusList mocks base method.
+func (m *MockKptService) EstrusList(arg0 context.Context, arg1 *cowPb.SearchEventRequest, arg2 *cowPb.PaginationModel) (*cowPb.EstrusEventResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "EstrusList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.EstrusEventResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// EstrusList indicates an expected call of EstrusList.
+func (mr *MockKptServiceMockRecorder) EstrusList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EstrusList", reflect.TypeOf((*MockKptService)(nil).EstrusList), arg0, arg1, arg2)
+}
+
+// FrozenSemenCreate mocks base method.
+func (m *MockKptService) FrozenSemenCreate(arg0 context.Context, arg1 *cowPb.SearchFrozenSemenList) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "FrozenSemenCreate", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// FrozenSemenCreate indicates an expected call of FrozenSemenCreate.
+func (mr *MockKptServiceMockRecorder) FrozenSemenCreate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FrozenSemenCreate", reflect.TypeOf((*MockKptService)(nil).FrozenSemenCreate), arg0, arg1)
+}
+
+// FrozenSemenList mocks base method.
+func (m *MockKptService) FrozenSemenList(arg0 context.Context, arg1 *cowPb.FrozenSemenRequest, arg2 *cowPb.PaginationModel) (*cowPb.FrozenSemenResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "FrozenSemenList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.FrozenSemenResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// FrozenSemenList indicates an expected call of FrozenSemenList.
+func (mr *MockKptServiceMockRecorder) FrozenSemenList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FrozenSemenList", reflect.TypeOf((*MockKptService)(nil).FrozenSemenList), arg0, arg1, arg2)
+}
+
+// GetCurrentUserName mocks base method.
+func (m *MockKptService) GetCurrentUserName(arg0 context.Context) (string, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "GetCurrentUserName", arg0)
+	ret0, _ := ret[0].(string)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// GetCurrentUserName indicates an expected call of GetCurrentUserName.
+func (mr *MockKptServiceMockRecorder) GetCurrentUserName(arg0 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCurrentUserName", reflect.TypeOf((*MockKptService)(nil).GetCurrentUserName), arg0)
+}
+
+// GetRoleMenuList mocks base method.
+func (m *MockKptService) GetRoleMenuList(arg0 context.Context, arg1 int64) (*cowPb.SystemRoleMenuResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "GetRoleMenuList", arg0, arg1)
+	ret0, _ := ret[0].(*cowPb.SystemRoleMenuResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// GetRoleMenuList indicates an expected call of GetRoleMenuList.
+func (mr *MockKptServiceMockRecorder) GetRoleMenuList(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRoleMenuList", reflect.TypeOf((*MockKptService)(nil).GetRoleMenuList), arg0, arg1)
+}
+
+// GetSystemUserMenu mocks base method.
+func (m *MockKptService) GetSystemUserMenu(arg0 context.Context) (*cowPb.SystemUserMenuTreeResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "GetSystemUserMenu", arg0)
+	ret0, _ := ret[0].(*cowPb.SystemUserMenuTreeResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// GetSystemUserMenu indicates an expected call of GetSystemUserMenu.
+func (mr *MockKptServiceMockRecorder) GetSystemUserMenu(arg0 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSystemUserMenu", reflect.TypeOf((*MockKptService)(nil).GetSystemUserMenu), arg0)
+}
+
+// GroupTransferList mocks base method.
+func (m *MockKptService) GroupTransferList(arg0 context.Context, arg1 *cowPb.SearchEventRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchTransferGroupEventResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "GroupTransferList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchTransferGroupEventResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// GroupTransferList indicates an expected call of GroupTransferList.
+func (mr *MockKptServiceMockRecorder) GroupTransferList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GroupTransferList", reflect.TypeOf((*MockKptService)(nil).GroupTransferList), arg0, arg1, arg2)
+}
+
+// GrowthCurve mocks base method.
+func (m *MockKptService) GrowthCurve(arg0 context.Context, arg1 *cowPb.SearchGrowthCurvesRequest) (*cowPb.GrowthCurvesResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "GrowthCurve", arg0, arg1)
+	ret0, _ := ret[0].(*cowPb.GrowthCurvesResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// GrowthCurve indicates an expected call of GrowthCurve.
+func (mr *MockKptServiceMockRecorder) GrowthCurve(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GrowthCurve", reflect.TypeOf((*MockKptService)(nil).GrowthCurve), arg0, arg1)
+}
+
+// ImmunizationIsShow mocks base method.
+func (m *MockKptService) ImmunizationIsShow(arg0 context.Context, arg1 int64) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "ImmunizationIsShow", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// ImmunizationIsShow indicates an expected call of ImmunizationIsShow.
+func (mr *MockKptServiceMockRecorder) ImmunizationIsShow(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ImmunizationIsShow", reflect.TypeOf((*MockKptService)(nil).ImmunizationIsShow), arg0, arg1)
+}
+
+// ImmunizationList mocks base method.
+func (m *MockKptService) ImmunizationList(arg0 context.Context, arg1 *cowPb.ImmunizationRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchImmunizationResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "ImmunizationList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchImmunizationResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// ImmunizationList indicates an expected call of ImmunizationList.
+func (mr *MockKptServiceMockRecorder) ImmunizationList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ImmunizationList", reflect.TypeOf((*MockKptService)(nil).ImmunizationList), arg0, arg1, arg2)
+}
+
+// IsShowSystemRole mocks base method.
+func (m *MockKptService) IsShowSystemRole(arg0 context.Context, arg1 int64) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "IsShowSystemRole", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// IsShowSystemRole indicates an expected call of IsShowSystemRole.
+func (mr *MockKptServiceMockRecorder) IsShowSystemRole(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsShowSystemRole", reflect.TypeOf((*MockKptService)(nil).IsShowSystemRole), arg0, arg1)
+}
+
+// IsShowSystemUser mocks base method.
+func (m *MockKptService) IsShowSystemUser(arg0 context.Context, arg1 int64) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "IsShowSystemUser", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// IsShowSystemUser indicates an expected call of IsShowSystemUser.
+func (mr *MockKptServiceMockRecorder) IsShowSystemUser(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsShowSystemUser", reflect.TypeOf((*MockKptService)(nil).IsShowSystemUser), arg0, arg1)
+}
+
+// Login mocks base method.
+func (m *MockKptService) Login(arg0 context.Context, arg1 *cowPb.SearchUserRequest) (*cowPb.SystemUserResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "Login", arg0, arg1)
+	ret0, _ := ret[0].(*cowPb.SystemUserResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// Login indicates an expected call of Login.
+func (mr *MockKptServiceMockRecorder) Login(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Login", reflect.TypeOf((*MockKptService)(nil).Login), arg0, arg1)
+}
+
+// MatingCreate mocks base method.
+func (m *MockKptService) MatingCreate(arg0 context.Context, arg1 *cowPb.EventMating) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "MatingCreate", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// MatingCreate indicates an expected call of MatingCreate.
+func (mr *MockKptServiceMockRecorder) MatingCreate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MatingCreate", reflect.TypeOf((*MockKptService)(nil).MatingCreate), arg0, arg1)
+}
+
+// MatingList mocks base method.
+func (m *MockKptService) MatingList(arg0 context.Context, arg1 *cowPb.SearchEventRequest, arg2 *cowPb.PaginationModel) (*cowPb.MatingEventResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "MatingList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.MatingEventResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// MatingList indicates an expected call of MatingList.
+func (mr *MockKptServiceMockRecorder) MatingList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MatingList", reflect.TypeOf((*MockKptService)(nil).MatingList), arg0, arg1, arg2)
+}
+
+// MatingTimely mocks base method.
+func (m *MockKptService) MatingTimely(arg0 context.Context, arg1 *cowPb.MatingTimelyRequest) (*model.MatingTimelyResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "MatingTimely", arg0, arg1)
+	ret0, _ := ret[0].(*model.MatingTimelyResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// MatingTimely indicates an expected call of MatingTimely.
+func (mr *MockKptServiceMockRecorder) MatingTimely(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MatingTimely", reflect.TypeOf((*MockKptService)(nil).MatingTimely), arg0, arg1)
+}
+
+// MedicalEquipmentCreateOrUpdate mocks base method.
+func (m *MockKptService) MedicalEquipmentCreateOrUpdate(arg0 context.Context, arg1 *cowPb.SearchMedicalEquipmentList) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "MedicalEquipmentCreateOrUpdate", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// MedicalEquipmentCreateOrUpdate indicates an expected call of MedicalEquipmentCreateOrUpdate.
+func (mr *MockKptServiceMockRecorder) MedicalEquipmentCreateOrUpdate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MedicalEquipmentCreateOrUpdate", reflect.TypeOf((*MockKptService)(nil).MedicalEquipmentCreateOrUpdate), arg0, arg1)
+}
+
+// MedicalEquipmentList mocks base method.
+func (m *MockKptService) MedicalEquipmentList(arg0 context.Context, arg1 *cowPb.SearchMedicalEquipmentRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchMedicalEquipmentResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "MedicalEquipmentList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchMedicalEquipmentResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// MedicalEquipmentList indicates an expected call of MedicalEquipmentList.
+func (mr *MockKptServiceMockRecorder) MedicalEquipmentList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MedicalEquipmentList", reflect.TypeOf((*MockKptService)(nil).MedicalEquipmentList), arg0, arg1, arg2)
+}
+
+// MultipleFactorAnalysis mocks base method.
+func (m *MockKptService) MultipleFactorAnalysis(arg0 context.Context, arg1 *cowPb.MultiFactorPregnancyRateRequest) (*cowPb.MultiFactorPregnancyRateResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "MultipleFactorAnalysis", arg0, arg1)
+	ret0, _ := ret[0].(*cowPb.MultiFactorPregnancyRateResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// MultipleFactorAnalysis indicates an expected call of MultipleFactorAnalysis.
+func (mr *MockKptServiceMockRecorder) MultipleFactorAnalysis(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MultipleFactorAnalysis", reflect.TypeOf((*MockKptService)(nil).MultipleFactorAnalysis), arg0, arg1)
+}
+
+// OrderCreateOrUpdate mocks base method.
+func (m *MockKptService) OrderCreateOrUpdate(arg0 context.Context, arg1 *cowPb.WorkOrderList) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "OrderCreateOrUpdate", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// OrderCreateOrUpdate indicates an expected call of OrderCreateOrUpdate.
+func (mr *MockKptServiceMockRecorder) OrderCreateOrUpdate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OrderCreateOrUpdate", reflect.TypeOf((*MockKptService)(nil).OrderCreateOrUpdate), arg0, arg1)
+}
+
+// OrderIsShow mocks base method.
+func (m *MockKptService) OrderIsShow(arg0 context.Context, arg1 int64) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "OrderIsShow", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// OrderIsShow indicates an expected call of OrderIsShow.
+func (mr *MockKptServiceMockRecorder) OrderIsShow(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OrderIsShow", reflect.TypeOf((*MockKptService)(nil).OrderIsShow), arg0, arg1)
+}
+
+// OrderList mocks base method.
+func (m *MockKptService) OrderList(arg0 context.Context, arg1 *cowPb.SearchWorkOrderRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchWorkOrderResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "OrderList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchWorkOrderResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// OrderList indicates an expected call of OrderList.
+func (mr *MockKptServiceMockRecorder) OrderList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OrderList", reflect.TypeOf((*MockKptService)(nil).OrderList), arg0, arg1, arg2)
+}
+
+// PenWeight mocks base method.
+func (m *MockKptService) PenWeight(arg0 context.Context, arg1 *cowPb.PenWeightRequest, arg2 *cowPb.PaginationModel) (*cowPb.PenWeightResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "PenWeight", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.PenWeightResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// PenWeight indicates an expected call of PenWeight.
+func (mr *MockKptServiceMockRecorder) PenWeight(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PenWeight", reflect.TypeOf((*MockKptService)(nil).PenWeight), arg0, arg1, arg2)
+}
+
+// PregnancyReport mocks base method.
+func (m *MockKptService) PregnancyReport(arg0 context.Context, arg1 *cowPb.PregnancyReportRequest, arg2 *cowPb.PaginationModel) (*cowPb.PregnancyReportResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "PregnancyReport", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.PregnancyReportResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// PregnancyReport indicates an expected call of PregnancyReport.
+func (mr *MockKptServiceMockRecorder) PregnancyReport(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PregnancyReport", reflect.TypeOf((*MockKptService)(nil).PregnancyReport), arg0, arg1, arg2)
+}
+
+// PregnantCheckCreate mocks base method.
+func (m *MockKptService) PregnantCheckCreate(arg0 context.Context, arg1 *cowPb.EventPregnantCheck) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "PregnantCheckCreate", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// PregnantCheckCreate indicates an expected call of PregnantCheckCreate.
+func (mr *MockKptServiceMockRecorder) PregnantCheckCreate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PregnantCheckCreate", reflect.TypeOf((*MockKptService)(nil).PregnantCheckCreate), arg0, arg1)
+}
+
+// PregnantCheckList mocks base method.
+func (m *MockKptService) PregnantCheckList(arg0 context.Context, arg1 *cowPb.SearchEventRequest, arg2 *cowPb.PaginationModel) (*cowPb.PregnantCheckEventResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "PregnantCheckList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.PregnantCheckEventResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// PregnantCheckList indicates an expected call of PregnantCheckList.
+func (mr *MockKptServiceMockRecorder) PregnantCheckList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PregnantCheckList", reflect.TypeOf((*MockKptService)(nil).PregnantCheckList), arg0, arg1, arg2)
+}
+
+// PrescriptionOptions mocks base method.
+func (m *MockKptService) PrescriptionOptions(arg0 context.Context) (*cowPb.ConfigOptionsListResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "PrescriptionOptions", arg0)
+	ret0, _ := ret[0].(*cowPb.ConfigOptionsListResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// PrescriptionOptions indicates an expected call of PrescriptionOptions.
+func (mr *MockKptServiceMockRecorder) PrescriptionOptions(arg0 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PrescriptionOptions", reflect.TypeOf((*MockKptService)(nil).PrescriptionOptions), arg0)
+}
+
+// ResetPasswordSystemUser mocks base method.
+func (m *MockKptService) ResetPasswordSystemUser(arg0 context.Context, arg1 *cowPb.ResetUserPasswordRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "ResetPasswordSystemUser", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// ResetPasswordSystemUser indicates an expected call of ResetPasswordSystemUser.
+func (mr *MockKptServiceMockRecorder) ResetPasswordSystemUser(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResetPasswordSystemUser", reflect.TypeOf((*MockKptService)(nil).ResetPasswordSystemUser), arg0, arg1)
+}
+
+// RoleMenuSave mocks base method.
+func (m *MockKptService) RoleMenuSave(arg0 context.Context, arg1 *cowPb.SystemRoleMenuRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "RoleMenuSave", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// RoleMenuSave indicates an expected call of RoleMenuSave.
+func (mr *MockKptServiceMockRecorder) RoleMenuSave(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RoleMenuSave", reflect.TypeOf((*MockKptService)(nil).RoleMenuSave), arg0, arg1)
+}
+
+// SameTimeCreate mocks base method.
+func (m *MockKptService) SameTimeCreate(arg0 context.Context, arg1 *cowPb.EventSameTime) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SameTimeCreate", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// SameTimeCreate indicates an expected call of SameTimeCreate.
+func (mr *MockKptServiceMockRecorder) SameTimeCreate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SameTimeCreate", reflect.TypeOf((*MockKptService)(nil).SameTimeCreate), arg0, arg1)
+}
+
+// SameTimeIsShow mocks base method.
+func (m *MockKptService) SameTimeIsShow(arg0 context.Context, arg1 int64) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SameTimeIsShow", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// SameTimeIsShow indicates an expected call of SameTimeIsShow.
+func (mr *MockKptServiceMockRecorder) SameTimeIsShow(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SameTimeIsShow", reflect.TypeOf((*MockKptService)(nil).SameTimeIsShow), arg0, arg1)
+}
+
+// SameTimeList mocks base method.
+func (m *MockKptService) SameTimeList(arg0 context.Context, arg1 *cowPb.SearchEventRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchSameTimeResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SameTimeList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchSameTimeResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SameTimeList indicates an expected call of SameTimeList.
+func (mr *MockKptServiceMockRecorder) SameTimeList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SameTimeList", reflect.TypeOf((*MockKptService)(nil).SameTimeList), arg0, arg1, arg2)
+}
+
+// SearchBarnList mocks base method.
+func (m *MockKptService) SearchBarnList(arg0 context.Context, arg1 *cowPb.SearchNameRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchBarnResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SearchBarnList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchBarnResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SearchBarnList indicates an expected call of SearchBarnList.
+func (mr *MockKptServiceMockRecorder) SearchBarnList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SearchBarnList", reflect.TypeOf((*MockKptService)(nil).SearchBarnList), arg0, arg1, arg2)
+}
+
+// SearchBarnTypeList mocks base method.
+func (m *MockKptService) SearchBarnTypeList(arg0 context.Context, arg1 *cowPb.SearchNameRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchBaseConfigResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SearchBarnTypeList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchBaseConfigResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SearchBarnTypeList indicates an expected call of SearchBarnTypeList.
+func (mr *MockKptServiceMockRecorder) SearchBarnTypeList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SearchBarnTypeList", reflect.TypeOf((*MockKptService)(nil).SearchBarnTypeList), arg0, arg1, arg2)
+}
+
+// SearchBreedStatusList mocks base method.
+func (m *MockKptService) SearchBreedStatusList(arg0 context.Context, arg1 *cowPb.SearchNameRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchBaseConfigResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SearchBreedStatusList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchBaseConfigResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SearchBreedStatusList indicates an expected call of SearchBreedStatusList.
+func (mr *MockKptServiceMockRecorder) SearchBreedStatusList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SearchBreedStatusList", reflect.TypeOf((*MockKptService)(nil).SearchBreedStatusList), arg0, arg1, arg2)
+}
+
+// SearchCowKindList mocks base method.
+func (m *MockKptService) SearchCowKindList(arg0 context.Context, arg1 *cowPb.SearchNameRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchBaseConfigResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SearchCowKindList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchBaseConfigResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SearchCowKindList indicates an expected call of SearchCowKindList.
+func (mr *MockKptServiceMockRecorder) SearchCowKindList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SearchCowKindList", reflect.TypeOf((*MockKptService)(nil).SearchCowKindList), arg0, arg1, arg2)
+}
+
+// SearchCowSourceList mocks base method.
+func (m *MockKptService) SearchCowSourceList(arg0 context.Context, arg1 *cowPb.SearchNameRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchBaseConfigResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SearchCowSourceList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchBaseConfigResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SearchCowSourceList indicates an expected call of SearchCowSourceList.
+func (mr *MockKptServiceMockRecorder) SearchCowSourceList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SearchCowSourceList", reflect.TypeOf((*MockKptService)(nil).SearchCowSourceList), arg0, arg1, arg2)
+}
+
+// SearchCowStatusList mocks base method.
+func (m *MockKptService) SearchCowStatusList(arg0 context.Context, arg1 *cowPb.SearchNameRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchBaseConfigResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SearchCowStatusList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchBaseConfigResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SearchCowStatusList indicates an expected call of SearchCowStatusList.
+func (mr *MockKptServiceMockRecorder) SearchCowStatusList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SearchCowStatusList", reflect.TypeOf((*MockKptService)(nil).SearchCowStatusList), arg0, arg1, arg2)
+}
+
+// SearchCowTypeList mocks base method.
+func (m *MockKptService) SearchCowTypeList(arg0 context.Context, arg1 *cowPb.SearchNameRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchBaseConfigResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SearchCowTypeList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchBaseConfigResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SearchCowTypeList indicates an expected call of SearchCowTypeList.
+func (mr *MockKptServiceMockRecorder) SearchCowTypeList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SearchCowTypeList", reflect.TypeOf((*MockKptService)(nil).SearchCowTypeList), arg0, arg1, arg2)
+}
+
+// SearchDiseaseList mocks base method.
+func (m *MockKptService) SearchDiseaseList(arg0 context.Context, arg1 *cowPb.SearchDiseaseRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchDiseaseResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SearchDiseaseList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchDiseaseResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SearchDiseaseList indicates an expected call of SearchDiseaseList.
+func (mr *MockKptServiceMockRecorder) SearchDiseaseList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SearchDiseaseList", reflect.TypeOf((*MockKptService)(nil).SearchDiseaseList), arg0, arg1, arg2)
+}
+
+// SearchDiseaseTypeList mocks base method.
+func (m *MockKptService) SearchDiseaseTypeList(arg0 context.Context, arg1 *cowPb.SearchNameRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchBaseConfigResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SearchDiseaseTypeList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchBaseConfigResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SearchDiseaseTypeList indicates an expected call of SearchDiseaseTypeList.
+func (mr *MockKptServiceMockRecorder) SearchDiseaseTypeList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SearchDiseaseTypeList", reflect.TypeOf((*MockKptService)(nil).SearchDiseaseTypeList), arg0, arg1, arg2)
+}
+
+// SearchPrescriptionList mocks base method.
+func (m *MockKptService) SearchPrescriptionList(arg0 context.Context, arg1 *cowPb.SearchPrescriptionRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchPrescriptionResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SearchPrescriptionList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchPrescriptionResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SearchPrescriptionList indicates an expected call of SearchPrescriptionList.
+func (mr *MockKptServiceMockRecorder) SearchPrescriptionList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SearchPrescriptionList", reflect.TypeOf((*MockKptService)(nil).SearchPrescriptionList), arg0, arg1, arg2)
+}
+
+// SearchSameTimeList mocks base method.
+func (m *MockKptService) SearchSameTimeList(arg0 context.Context, arg1 *cowPb.SearchNameRequest, arg2 *cowPb.PaginationModel) (*cowPb.SameTimeResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SearchSameTimeList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SameTimeResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SearchSameTimeList indicates an expected call of SearchSameTimeList.
+func (mr *MockKptServiceMockRecorder) SearchSameTimeList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SearchSameTimeList", reflect.TypeOf((*MockKptService)(nil).SearchSameTimeList), arg0, arg1, arg2)
+}
+
+// SearchSystemDeptList mocks base method.
+func (m *MockKptService) SearchSystemDeptList(arg0 context.Context, arg1 *cowPb.SearchDeptRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchDeptResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SearchSystemDeptList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchDeptResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SearchSystemDeptList indicates an expected call of SearchSystemDeptList.
+func (mr *MockKptServiceMockRecorder) SearchSystemDeptList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SearchSystemDeptList", reflect.TypeOf((*MockKptService)(nil).SearchSystemDeptList), arg0, arg1, arg2)
+}
+
+// SearchSystemMenuList mocks base method.
+func (m *MockKptService) SearchSystemMenuList(arg0 context.Context, arg1 *cowPb.SearchMenuRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchMenuResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SearchSystemMenuList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchMenuResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SearchSystemMenuList indicates an expected call of SearchSystemMenuList.
+func (mr *MockKptServiceMockRecorder) SearchSystemMenuList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SearchSystemMenuList", reflect.TypeOf((*MockKptService)(nil).SearchSystemMenuList), arg0, arg1, arg2)
+}
+
+// SearchSystemRoleList mocks base method.
+func (m *MockKptService) SearchSystemRoleList(arg0 context.Context, arg1 *cowPb.SearchRoleRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchRoleResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SearchSystemRoleList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchRoleResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SearchSystemRoleList indicates an expected call of SearchSystemRoleList.
+func (mr *MockKptServiceMockRecorder) SearchSystemRoleList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SearchSystemRoleList", reflect.TypeOf((*MockKptService)(nil).SearchSystemRoleList), arg0, arg1, arg2)
+}
+
+// SearchSystemUserList mocks base method.
+func (m *MockKptService) SearchSystemUserList(arg0 context.Context, arg1 *cowPb.SearchUserRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchUserResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SearchSystemUserList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchUserResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SearchSystemUserList indicates an expected call of SearchSystemUserList.
+func (mr *MockKptServiceMockRecorder) SearchSystemUserList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SearchSystemUserList", reflect.TypeOf((*MockKptService)(nil).SearchSystemUserList), arg0, arg1, arg2)
+}
+
+// SearchTransferPenReasonList mocks base method.
+func (m *MockKptService) SearchTransferPenReasonList(arg0 context.Context, arg1 *cowPb.SearchNameRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchBaseConfigResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SearchTransferPenReasonList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchBaseConfigResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SearchTransferPenReasonList indicates an expected call of SearchTransferPenReasonList.
+func (mr *MockKptServiceMockRecorder) SearchTransferPenReasonList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SearchTransferPenReasonList", reflect.TypeOf((*MockKptService)(nil).SearchTransferPenReasonList), arg0, arg1, arg2)
+}
+
+// SingleFactorInfantSurvivalRateAnalysis mocks base method.
+func (m *MockKptService) SingleFactorInfantSurvivalRateAnalysis(arg0 context.Context, arg1 *cowPb.SingleFactorPregnancyRateRequest) (*cowPb.SingleFactorPregnancyRateResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SingleFactorInfantSurvivalRateAnalysis", arg0, arg1)
+	ret0, _ := ret[0].(*cowPb.SingleFactorPregnancyRateResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SingleFactorInfantSurvivalRateAnalysis indicates an expected call of SingleFactorInfantSurvivalRateAnalysis.
+func (mr *MockKptServiceMockRecorder) SingleFactorInfantSurvivalRateAnalysis(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SingleFactorInfantSurvivalRateAnalysis", reflect.TypeOf((*MockKptService)(nil).SingleFactorInfantSurvivalRateAnalysis), arg0, arg1)
+}
+
+// SystemBaseConfigOptions mocks base method.
+func (m *MockKptService) SystemBaseConfigOptions(arg0 context.Context, arg1, arg2 string) (*cowPb.ConfigOptionsListResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SystemBaseConfigOptions", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.ConfigOptionsListResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SystemBaseConfigOptions indicates an expected call of SystemBaseConfigOptions.
+func (mr *MockKptServiceMockRecorder) SystemBaseConfigOptions(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SystemBaseConfigOptions", reflect.TypeOf((*MockKptService)(nil).SystemBaseConfigOptions), arg0, arg1, arg2)
+}
+
+// SystemDepDelete mocks base method.
+func (m *MockKptService) SystemDepDelete(arg0 context.Context, arg1 int64) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SystemDepDelete", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// SystemDepDelete indicates an expected call of SystemDepDelete.
+func (mr *MockKptServiceMockRecorder) SystemDepDelete(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SystemDepDelete", reflect.TypeOf((*MockKptService)(nil).SystemDepDelete), arg0, arg1)
+}
+
+// SystemDeptCreateOrUpdate mocks base method.
+func (m *MockKptService) SystemDeptCreateOrUpdate(arg0 context.Context, arg1 *cowPb.SearchDeptRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SystemDeptCreateOrUpdate", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// SystemDeptCreateOrUpdate indicates an expected call of SystemDeptCreateOrUpdate.
+func (mr *MockKptServiceMockRecorder) SystemDeptCreateOrUpdate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SystemDeptCreateOrUpdate", reflect.TypeOf((*MockKptService)(nil).SystemDeptCreateOrUpdate), arg0, arg1)
+}
+
+// SystemMenuTree mocks base method.
+func (m *MockKptService) SystemMenuTree(arg0 context.Context) (*cowPb.SystemMenuTreeResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SystemMenuTree", arg0)
+	ret0, _ := ret[0].(*cowPb.SystemMenuTreeResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SystemMenuTree indicates an expected call of SystemMenuTree.
+func (mr *MockKptServiceMockRecorder) SystemMenuTree(arg0 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SystemMenuTree", reflect.TypeOf((*MockKptService)(nil).SystemMenuTree), arg0)
+}
+
+// SystemRoleCreateOrUpdate mocks base method.
+func (m *MockKptService) SystemRoleCreateOrUpdate(arg0 context.Context, arg1 *cowPb.SearchRoleRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SystemRoleCreateOrUpdate", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// SystemRoleCreateOrUpdate indicates an expected call of SystemRoleCreateOrUpdate.
+func (mr *MockKptServiceMockRecorder) SystemRoleCreateOrUpdate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SystemRoleCreateOrUpdate", reflect.TypeOf((*MockKptService)(nil).SystemRoleCreateOrUpdate), arg0, arg1)
+}
+
+// SystemRoleList mocks base method.
+func (m *MockKptService) SystemRoleList(arg0 context.Context) (*cowPb.GetRoleListResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SystemRoleList", arg0)
+	ret0, _ := ret[0].(*cowPb.GetRoleListResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SystemRoleList indicates an expected call of SystemRoleList.
+func (mr *MockKptServiceMockRecorder) SystemRoleList(arg0 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SystemRoleList", reflect.TypeOf((*MockKptService)(nil).SystemRoleList), arg0)
+}
+
+// SystemUserCreateOrUpdate mocks base method.
+func (m *MockKptService) SystemUserCreateOrUpdate(arg0 context.Context, arg1 *cowPb.SearchUserRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SystemUserCreateOrUpdate", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// SystemUserCreateOrUpdate indicates an expected call of SystemUserCreateOrUpdate.
+func (mr *MockKptServiceMockRecorder) SystemUserCreateOrUpdate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SystemUserCreateOrUpdate", reflect.TypeOf((*MockKptService)(nil).SystemUserCreateOrUpdate), arg0, arg1)
+}
+
+// SystemUserOptions mocks base method.
+func (m *MockKptService) SystemUserOptions(arg0 context.Context, arg1 int) (*cowPb.ConfigOptionsListResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SystemUserOptions", arg0, arg1)
+	ret0, _ := ret[0].(*cowPb.ConfigOptionsListResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SystemUserOptions indicates an expected call of SystemUserOptions.
+func (mr *MockKptServiceMockRecorder) SystemUserOptions(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SystemUserOptions", reflect.TypeOf((*MockKptService)(nil).SystemUserOptions), arg0, arg1)
+}
+
+// SystemUserRole mocks base method.
+func (m *MockKptService) SystemUserRole(arg0 context.Context, arg1 int64) (*cowPb.SystemUserRoleResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SystemUserRole", arg0, arg1)
+	ret0, _ := ret[0].(*cowPb.SystemUserRoleResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// SystemUserRole indicates an expected call of SystemUserRole.
+func (mr *MockKptServiceMockRecorder) SystemUserRole(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SystemUserRole", reflect.TypeOf((*MockKptService)(nil).SystemUserRole), arg0, arg1)
+}
+
+// SystemUserRoleSave mocks base method.
+func (m *MockKptService) SystemUserRoleSave(arg0 context.Context, arg1 *cowPb.SystemUserRoleRequest) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "SystemUserRoleSave", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// SystemUserRoleSave indicates an expected call of SystemUserRoleSave.
+func (mr *MockKptServiceMockRecorder) SystemUserRoleSave(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SystemUserRoleSave", reflect.TypeOf((*MockKptService)(nil).SystemUserRoleSave), arg0, arg1)
+}
+
+// TwentyOnePregnantRate mocks base method.
+func (m *MockKptService) TwentyOnePregnantRate(arg0 context.Context, arg1 *cowPb.TwentyOnePregnantRateRequest) (*cowPb.TwentyOnePregnantRateResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "TwentyOnePregnantRate", arg0, arg1)
+	ret0, _ := ret[0].(*cowPb.TwentyOnePregnantRateResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// TwentyOnePregnantRate indicates an expected call of TwentyOnePregnantRate.
+func (mr *MockKptServiceMockRecorder) TwentyOnePregnantRate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TwentyOnePregnantRate", reflect.TypeOf((*MockKptService)(nil).TwentyOnePregnantRate), arg0, arg1)
+}
+
+// UserWorkOrderList mocks base method.
+func (m *MockKptService) UserWorkOrderList(arg0 context.Context, arg1 cowPb.WorkOrderStatus_Kind, arg2 *cowPb.PaginationModel) (*cowPb.UserWorkOrderResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "UserWorkOrderList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.UserWorkOrderResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// UserWorkOrderList indicates an expected call of UserWorkOrderList.
+func (mr *MockKptServiceMockRecorder) UserWorkOrderList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UserWorkOrderList", reflect.TypeOf((*MockKptService)(nil).UserWorkOrderList), arg0, arg1, arg2)
+}
+
+// WeightCreate mocks base method.
+func (m *MockKptService) WeightCreate(arg0 context.Context, arg1 *cowPb.EventWeight) error {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "WeightCreate", arg0, arg1)
+	ret0, _ := ret[0].(error)
+	return ret0
+}
+
+// WeightCreate indicates an expected call of WeightCreate.
+func (mr *MockKptServiceMockRecorder) WeightCreate(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WeightCreate", reflect.TypeOf((*MockKptService)(nil).WeightCreate), arg0, arg1)
+}
+
+// WeightList mocks base method.
+func (m *MockKptService) WeightList(arg0 context.Context, arg1 *cowPb.SearchEventRequest, arg2 *cowPb.PaginationModel) (*cowPb.SearchWeightEventResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "WeightList", arg0, arg1, arg2)
+	ret0, _ := ret[0].(*cowPb.SearchWeightEventResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// WeightList indicates an expected call of WeightList.
+func (mr *MockKptServiceMockRecorder) WeightList(arg0, arg1, arg2 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WeightList", reflect.TypeOf((*MockKptService)(nil).WeightList), arg0, arg1, arg2)
+}
+
+// WeightRange mocks base method.
+func (m *MockKptService) WeightRange(arg0 context.Context, arg1 *cowPb.WeightRangeRequest) (*cowPb.WeightRangeResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "WeightRange", arg0, arg1)
+	ret0, _ := ret[0].(*cowPb.WeightRangeResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// WeightRange indicates an expected call of WeightRange.
+func (mr *MockKptServiceMockRecorder) WeightRange(arg0, arg1 interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WeightRange", reflect.TypeOf((*MockKptService)(nil).WeightRange), arg0, arg1)
+}

+ 12 - 0
module/backend/sql.go

@@ -275,3 +275,15 @@ func (s *StoreEntry) UpdateCowPenId(ctx context.Context, cowId, penId int64) {
 		zaplog.Error("UpdateCowPenId", zap.Any("cow_id", cowId), zap.Any("pen_id", penId), zap.Any("err", err))
 	}
 }
+
+func (s *StoreEntry) GetLastEventMating(ctx context.Context, cowId int64) (*model.EventMating, error) {
+	res := &model.EventMating{}
+	if err := s.DB.Where("cow_id = ?", cowId).Order("reality_day desc").First(res).Error; err != nil {
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return res, nil
+		} else {
+			return nil, xerr.WithStack(err)
+		}
+	}
+	return res, nil
+}