| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 | package backendimport (	"context"	"fmt"	"kpt-pasture/model"	"strings"	"time"	"gitee.com/xuyiping_admin/pkg/xerr"	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow")func (s *StoreEntry) SubmitEventLog(	ctx context.Context,	currentUser *model.SystemUser,	cow *model.Cow,	eventType pasturePb.EventType_Kind,	exposeEstrusType pasturePb.ExposeEstrusType_Kind,	req interface{},) *model.EventCowLog {	var (		desc, remarks   = "", ""		eventTypeName   = s.EventTypeMap()[eventType]		eventAt         = int64(0)		eventCategoryId = pasturePb.EventCategory_Invalid		penMap          = s.PenMap(ctx, currentUser.PastureId)		cowTypeMap      = s.CowTypeMap()		operationUser   = &model.SystemUser{}	)	switch eventType {	case pasturePb.EventType_Enter:		eventCategoryId = pasturePb.EventCategory_Base	case pasturePb.EventType_Transfer_Ben:		data := req.(*model.EventTransferGroup)		transferAt, _ := time.Parse(model.LayoutDate2, data.TransferDate)		eventAt = transferAt.Unix()		remarks = data.Remarks		operationUser.Id = data.OperationId		operationUser.Name = data.OperationName		eventCategoryId = pasturePb.EventCategory_Base		desc = fmt.Sprintf("转出栏舍: %s; 转入栏舍: %s", penMap[data.PenOutId].Name, penMap[data.PenInId].Name)	case pasturePb.EventType_Body_Score:		eventCategoryId = pasturePb.EventCategory_Other	case pasturePb.EventType_Pregnancy_Check:		data := req.(*pasturePb.EventPregnantCheckBatch)		for _, v := range data.Item {			if int64(v.CowId) != cow.Id {				continue			}			eventAt = int64(v.PregnantCheckAt)			eventCategoryId = pasturePb.EventCategory_Breed			if v.PregnantCheckResult == pasturePb.PregnantCheckResult_Pregnant {				desc += fmt.Sprintf("孕检方式: %s; 孕检结果: %s", s.PregnantCheckMethodMap()[v.PregnantCheckMethod], s.MatingResultMap()[pasturePb.MatingResult_Pregnant])			}			if v.PregnantCheckResult == pasturePb.PregnantCheckResult_UnPregnant {				desc += fmt.Sprintf("孕检方式: %s", s.PregnantCheckMethodMap()[v.PregnantCheckMethod])				if cow.BreedStatus == pasturePb.BreedStatus_Abort {					desc += fmt.Sprintf("; 复检结果: %s", s.MatingResultMap()[pasturePb.MatingResult_Abort])				}				if cow.BreedStatus == pasturePb.BreedStatus_Empty {					desc += fmt.Sprintf("; 孕检结果: %s", s.MatingResultMap()[pasturePb.MatingResult_Empty])				}			}			operationUser.Id = int64(v.OperationId)			operationUser.Name = v.OperationName			remarks = v.Remarks		}	case pasturePb.EventType_Estrus:		eventType = pasturePb.EventType_Mating // 发情配种批量提交		data := req.(*pasturePb.EventEstrus)		eventAt = int64(data.MatingAt)		desc = fmt.Sprintf("配种公牛: %s;发情揭发方式:%s;配种结果:未知", data.BullNumber, s.ExposeEstrusTypeMap()[pasturePb.ExposeEstrusType_Neck_Ring])		operationUser.Id = int64(data.OperationId)		operationUser.Name = data.OperationName		remarks = data.Remarks		eventCategoryId = pasturePb.EventCategory_Breed	case pasturePb.EventType_Calving:		data := req.(*pasturePb.EventCalving)		eventAt = int64(data.CalvingAt)		desc = fmt.Sprintf("怀孕天数:%d;难产等级: %s;产子数量: %d", cow.PregnancyAge, s.CalvingLevelMap()[data.CalvingLevel], data.ChildNumber)		for _, v := range data.CalfItemList {			if v.CowId > 0 {				desc += fmt.Sprintf(";犊牛ID: %d; 出生体重: %f", v.CowId, v.Weight)			}		}		if data.IsInducingChildbirth == pasturePb.IsShow_Ok {			desc += fmt.Sprintf("; 难产原因: %s", s.DystociaReasonMap()[data.DystociaReason])		}		operationUser.Id = int64(data.OperationId)		operationUser.Name = data.OperationName		remarks = data.Remarks		eventCategoryId = pasturePb.EventCategory_Breed	case pasturePb.EventType_Seme_Time:		data := req.(*pasturePb.EventSameTime)		eventAt = int64(data.SameTimeAt)		desc = fmt.Sprintf("同期名称: %s;激素名称: %s;剂量:%f;操作人: %s", data.SameTimeTypeName, data.DrugsName, data.Usage, data.OperationName)		operationUser.Id = int64(data.OperationId)		operationUser.Name = data.OperationName		remarks = data.Remarks		eventCategoryId = pasturePb.EventCategory_Breed	case pasturePb.EventType_Mating:		data := req.(*pasturePb.EventMating)		eventAt = int64(data.MatingAt)		desc = fmt.Sprintf("配种公牛: %s;发情揭发方式:%s;配种结果:未知", data.FrozenSemenNumber, s.ExposeEstrusTypeMap()[exposeEstrusType])		operationUser.Id = int64(data.OperationId)		operationUser.Name = data.OperationName		remarks = data.Remarks		eventCategoryId = pasturePb.EventCategory_Breed	case pasturePb.EventType_Birth:		eventAt = cow.BirthAt		desc = fmt.Sprintf("出生体重: %fKG;母号:%s;父号: %s", float32(cow.BirthWeight)/100, cow.MotherNumber, cow.LastBullNumber)		eventCategoryId = pasturePb.EventCategory_Breed	case pasturePb.EventType_Death:		data := req.(*model.EventDeparture)		eventAt = data.DepartureAt		desc = fmt.Sprintf("死亡原因: %s", data.ReasonName)		operationUser.Id = data.OperationId		operationUser.Name = data.OperationName		eventCategoryId = pasturePb.EventCategory_Base	case pasturePb.EventType_Transfer_Out:		eventCategoryId = pasturePb.EventCategory_Base	case pasturePb.EventType_Transfer_In:		eventCategoryId = pasturePb.EventCategory_Base	case pasturePb.EventType_Out:		data := req.(*model.EventDeparture)		eventAt = data.DepartureAt		desc = fmt.Sprintf("淘汰原因: %s", data.ReasonName)		operationUser.Id = data.OperationId		operationUser.Name = data.OperationName		eventCategoryId = pasturePb.EventCategory_Base	case pasturePb.EventType_Immunication:		eventCategoryId = pasturePb.EventCategory_Health	case pasturePb.EventType_Weaning:		data := req.(*pasturePb.EventWeaningBatchRequest)		eventAt = int64(data.WeaningAt)		operationUser.Id = int64(data.OperationId)		operationUser.Name = data.OperationName		remarks = data.Remarks		for _, v := range data.Item {			if int64(v.CowId) == cow.Id {				desc = fmt.Sprintf("具体体重: %f", v.Weight)				break			}		}		eventCategoryId = pasturePb.EventCategory_Other	case pasturePb.EventType_Sale:		eventCategoryId = pasturePb.EventCategory_Other	case pasturePb.EventType_Abort:		data := req.(*pasturePb.EventAbortionRequest)		eventAt = int64(data.AbortionAt)		operationUser.Id = int64(data.OperationId)		operationUser.Name = data.OperationName		remarks = data.Remarks		desc = fmt.Sprintf("流产原因: %s", s.AbortionReasonsMap()[data.AbortionReasons])		eventCategoryId = pasturePb.EventCategory_Base	case pasturePb.EventType_Weight:		data := req.(*pasturePb.EventWeight)		eventAt = int64(data.WeightAt)		operationUser.Id = int64(data.OperationId)		operationUser.Name = data.OperationName		remarks = data.Remarks		for _, v := range data.WeightItems {			if int64(v.CowId) == cow.Id {				desc = fmt.Sprintf("日龄: %d;具体体重: %f", cow.DayAge, v.Weight)				break			}		}		eventCategoryId = pasturePb.EventCategory_Base	case pasturePb.EventType_Castrated:		eventCategoryId = pasturePb.EventCategory_Health	case pasturePb.EventType_Insect_Repellent:		eventCategoryId = pasturePb.EventCategory_Health	}	newEventCowLogModel := &model.EventCowLogModel{		Cow:               cow,		CowTypeName:       cowTypeMap[cow.CowType],		OperationUser:     operationUser,		EventCategoryKind: eventCategoryId,		EventAt:           eventAt,		EventType:         eventType,		EventTypeName:     eventTypeName,		Description:       desc,		Remarks:           remarks,		PenName:           penMap[cow.PenId].Name,	}	return model.NewEventCowLog(newEventCowLogModel)}func (s *StoreEntry) UpdateMatingResultEventCowLogByCowId(ctx context.Context, cowId int64, newResult string) error {	newEventCowLog := &model.EventCowLog{CowId: cowId}	if err := s.DB.Table(newEventCowLog.TableName()).		Where("cow_id = ?", cowId).		Where("event_category_id = ?", pasturePb.EventCategory_Breed).		Where("event_type = ?", pasturePb.EventType_Mating).		Order("id desc").		First(newEventCowLog).Error; err != nil {		return xerr.WithStack(err)	} else {		desc := strings.ReplaceAll(newEventCowLog.EventDescription, "未知 ", newResult)		if err = s.DB.Table(newEventCowLog.TableName()).			Where("cow_id = ?", cowId).			Where("event_category_id = ?", pasturePb.EventCategory_Breed).			Where("event_type = ?", pasturePb.EventType_Mating).			Update("event_description", desc).Error; err != nil {			return xerr.WithStack(err)		}	}	return nil}
 |