package backend import ( "context" "fmt" "kpt-pasture/model" "time" pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow" ) func (s *StoreEntry) SubmitEventLog( ctx context.Context, 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) penMap = s.PenMap(ctx) cowTypeMap = s.CowTypeMap() operationUser = &model.SystemUser{} ) switch eventType { case pasturePb.EventType_Enter: 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 desc = fmt.Sprintf("转出栏舍: %s; 转入栏舍: %s", penMap[data.PenOutId].Name, penMap[data.PenInId].Name) case pasturePb.EventType_Body_Score: 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) if v.PregnantCheckResult == pasturePb.PregnantCheckResult_Pregnant { desc += fmt.Sprintf("孕检方式: %s; 孕检结果: 怀孕", s.PregnantCheckMethodMap()[v.PregnantCheckMethod]) } if v.PregnantCheckResult == pasturePb.PregnantCheckResult_UnPregnant { desc += fmt.Sprintf("孕检方式: %s", s.PregnantCheckMethodMap()[v.PregnantCheckMethod]) if cow.BreedStatus == pasturePb.BreedStatus_Abort { desc += fmt.Sprintf("; 复检结果: 流产") } if cow.BreedStatus == pasturePb.BreedStatus_Empty { desc += fmt.Sprintf("; 孕检结果: 空怀") } } 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 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 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 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 case pasturePb.EventType_Birth: eventAt = cow.BirthAt desc = fmt.Sprintf("出生体重: %fKG;母号:%s;父号: %s", float32(cow.BirthWeight)/100, cow.MotherNumber, cow.LastBullNumber) 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 case pasturePb.EventType_Transfer_Out: case pasturePb.EventType_Transfer_In: 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 case pasturePb.EventType_Immunication: 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 } } case pasturePb.EventType_Sale: 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]) 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 } } case pasturePb.EventType_Castrated: case pasturePb.EventType_Insect_Repellent: } newEventCowLogModel := &model.EventCowLogModel{ Cow: cow, CowTypeName: cowTypeMap[cow.CowType], OperationUser: operationUser, EventAt: eventAt, EventType: eventType, EventTypeName: eventTypeName, Description: desc, Remarks: remarks, PenName: penMap[cow.PenId].Name, } return model.NewEventCowLog(newEventCowLogModel) }