123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- package crontab
- import (
- "encoding/json"
- "kpt-pasture/model"
- "sort"
- "time"
- "gorm.io/gorm"
- "gitee.com/xuyiping_admin/pkg/xerr"
- "gitee.com/xuyiping_admin/pkg/logger/zaplog"
- "go.uber.org/zap"
- pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
- )
- // GenerateCalendarBySameTimePlan 生成同期计划的牛只
- func (e *Entry) GenerateCalendarBySameTimePlan(cowList []*model.Cow, sameTime *model.SameTime) (err error) {
- if len(cowList) <= 0 {
- return nil
- }
- newCowList := make([]*model.Cow, 0)
- for _, cow := range cowList {
- if ok := e.IsExistSameTimeCow(cow, sameTime); ok {
- continue
- }
- newCowList = append(newCowList, cow)
- }
- if len(newCowList) <= 0 || len(sameTime.CollateNodes) <= 0 {
- return nil
- }
- collateNodes := make([]*pasturePb.CollateNode, 0)
- err = json.Unmarshal([]byte(sameTime.CollateNodes), &collateNodes)
- if err != nil {
- return xerr.WithStack(err)
- }
- // 排序
- sort.Slice(collateNodes, func(i, j int) bool {
- return collateNodes[i].Id < collateNodes[j].Id
- })
- showDay := time.Now()
- newSameTimeCowDetailList := make([]*model.EventCowSameTime, 0)
- newEventMatingList := make([]*model.EventMating, 0)
- for i, collateNode := range collateNodes {
- if i > 0 {
- showDay = showDay.AddDate(0, 0, int(collateNode.NextNodeDay))
- }
- calendarType := pasturePb.CalendarType_PG
- histCount := int64(0)
- if collateNode.SameTimeType == pasturePb.SameTimeType_TAI {
- calendarType = pasturePb.CalendarType_Mating
- histCount = e.GetTowardTaiCowSum(sameTime.PastureId)
- newEventMatingItems := model.NewEventMatingList(sameTime.PastureId, newCowList, showDay.Unix(), pasturePb.ExposeEstrusType_Same_Time)
- newEventMatingList = append(newEventMatingList, newEventMatingItems...)
- } else {
- if collateNode.SameTimeType == pasturePb.SameTimeType_RnGH {
- calendarType = pasturePb.CalendarType_RnGH
- }
- histCount = e.GetTowardSameTimeCowSum(sameTime, collateNode.SameTimeType)
- newEventCowSameTimeList := model.NewEventCowSameTimeList(sameTime.PastureId, newCowList, sameTime, showDay.Unix(), collateNode.SameTimeType)
- newSameTimeCowDetailList = append(newSameTimeCowDetailList, newEventCowSameTimeList...)
- }
- allCount := int32(len(newCowList)) + int32(histCount)
- e.CreatedCalendar(sameTime.PastureId, calendarType, showDay.Format(model.LayoutDate2), allCount)
- }
- zaplog.Info("GenerateCalendarBySameTimePlan",
- zap.Any("cowList", cowList),
- zap.Any("newSameTimeCowDetailList", newSameTimeCowDetailList),
- zap.Any("newEventMatingList", newEventMatingList),
- )
- if err = e.DB.Transaction(func(tx *gorm.DB) error {
- // 创建牛只同期详情表
- if len(newSameTimeCowDetailList) > 0 {
- if err = tx.Create(newSameTimeCowDetailList).Error; err != nil {
- return xerr.WithStack(err)
- }
- }
- // 创建牛只配种表
- if len(newEventMatingList) > 0 {
- if err = tx.Create(newEventMatingList).Error; err != nil {
- return xerr.WithStack(err)
- }
- }
- return nil
- }); err != nil {
- return xerr.WithStack(err)
- }
- return nil
- }
- // GetTowardSameTimeCowSum 获取历史未打激素牛只总数量
- func (e *Entry) GetTowardSameTimeCowSum(sameTime *model.SameTime, sameTimeType pasturePb.SameTimeType_Kind) int64 {
- res := int64(0)
- if err := e.DB.Model(&model.EventCowSameTime{}).
- Where("status = ?", pasturePb.IsShow_No).
- Where("pasture_id = ?", sameTime.PastureId).
- Where("same_time_id = ?", sameTime.Id).
- Where("same_time_type = ?", sameTimeType).
- Count(&res).Error; err != nil {
- zaplog.Error("GetTowardSameTimeCowSum", zap.Any("err", err))
- }
- return res
- }
- // GetTowardTaiCowSum 获取历史未配种牛只总数量
- func (e *Entry) GetTowardTaiCowSum(pastureId int64) int64 {
- res := int64(0)
- if err := e.DB.Model(&model.EventMating{}).
- Where("pasture_id = ?", pastureId).
- Where("status = ?", pasturePb.IsShow_No).
- Count(&res).Error; err != nil {
- zaplog.Error("GetTowardTaiCowSum", zap.Any("err", err))
- }
- return res
- }
|