123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- package crontab
- import (
- "kpt-pasture/model"
- "kpt-pasture/util"
- "time"
- pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
- "gitee.com/xuyiping_admin/pkg/logger/zaplog"
- "go.uber.org/zap"
- )
- func (e *Entry) InsertMilkDaily() error {
- pastureList := e.FindPastureList()
- if pastureList == nil || len(pastureList) == 0 {
- return nil
- }
- for _, pasture := range pastureList {
- e.ProcessMilkDaily(pasture.Id)
- }
- return nil
- }
- func (e *Entry) ProcessMilkDaily(pastureId int64) {
- // 获取最大记录日期或默认日期
- var maxDateTime string
- if err := e.DB.Model(new(model.MilkDaily)).
- Where("pasture_id = ?", pastureId).
- Select("IFNULL(MAX(heat_date) + INTERVAL 1 DAY, CURDATE() - INTERVAL 1 MONTH) AS max_date_time").
- Scan(&maxDateTime).Error; err != nil {
- zaplog.Error("ProcessMilkDaily", zap.Any("pastureId", pastureId), zap.Any("err", err))
- return
- }
- nowTime := time.Now().Local()
- if maxDateTime == "" {
- zaplog.Error("ProcessMilkDaily", zap.Any("pastureId", pastureId), zap.Any("maxDateTime", maxDateTime))
- return
- }
- maxDate, err := util.TimeParseLocal(model.LayoutDate2, maxDateTime)
- if err != nil {
- zaplog.Error("ProcessMilkDaily", zap.Any("pastureId", pastureId), zap.Any("err", err))
- return
- }
- // 处理每一天的数据
- for maxDate.Before(nowTime) {
- // 处理有胎次的奶牛
- if err = e.processCowsWithLact(maxDate); err != nil {
- zaplog.Error("ProcessMilkDaily", zap.Any("processCowsWithFetal", err))
- }
- // 处理无胎次的奶牛
- if err = e.processCowsWithNoLact(maxDate); err != nil {
- zaplog.Error("ProcessMilkDaily", zap.Any("processCowsWithoutFetal", err))
- }
- // 日期加1天
- maxDate = maxDate.AddDate(0, 0, 1)
- }
- }
- // 处理有胎次的奶牛
- func (e *Entry) processCowsWithLact(recordDate time.Time) error {
- // 查询有胎次且在记录日期前有记录的奶牛
- cowList := make([]*model.Cow, 0)
- if err := e.DB.Model(new(model.Cow)).
- Where("admission_status = ?", pasturePb.AdmissionStatus_Admission).
- Where("lact > ?", 0).
- Where("last_calving_at <= ?", recordDate.Local().Unix()).
- Find(&cowList).Error; err != nil {
- return err
- }
- // 批量插入数据
- milkDailyList := make([]*model.MilkDaily, 0)
- for _, cow := range cowList {
- calvingDate := ""
- if cow.LastCalvingAt > 0 {
- calvingDate = time.Unix(cow.LastCalvingAt, 0).Local().Format(model.LayoutDate2)
- }
- milkDaily := &model.MilkDaily{
- CowId: cow.Id,
- Lact: cow.Lact,
- PastureId: cow.PastureId,
- EarNumber: cow.EarNumber,
- CalvingDate: calvingDate,
- HeatDate: recordDate.Format(model.LayoutDate2),
- LactationAge: cow.LactationAge,
- PenId: cow.PenId,
- PenName: cow.PenName,
- BreedStatus: cow.BreedStatus,
- }
- milkDailyList = append(milkDailyList, milkDaily)
- }
- if len(milkDailyList) > 0 {
- if err := e.DB.Model(new(model.MilkDaily)).
- Create(&milkDailyList).Error; err != nil {
- return err
- }
- }
- return nil
- }
- // 处理无胎次的奶牛
- func (e *Entry) processCowsWithNoLact(recordDate time.Time) error {
- // 查询无胎次且EID1>0的奶牛
- cowList := make([]*model.Cow, 0)
- err := e.DB.Model(new(model.Cow)).
- //Select("c.intCowId as cow_id, c.intPastureId as pasture_id, c.varCowCode as cow_code,c.dateBirthDate as birth_date, c.intCurBar as cur_bar").
- //Where("(c.dateLeave IS NULL OR c.dateLeave > ?) AND c.intCurFetal = 0 AND c.EID1 > 0", recordDate).
- Where("admission_status = ?", pasturePb.AdmissionStatus_Admission).
- Where("lact = ?", 0).
- Where("neck_ring_number != ?", "").
- Find(&cowList).Error
- if err != nil {
- return err
- }
- // 批量插入数据
- milkDailyList := make([]*model.MilkDaily, 0)
- for _, cow := range cowList {
- birthDate, calvingDate := "", ""
- if cow.BirthAt > 0 {
- birthDate = time.Unix(cow.BirthAt, 0).Local().Format(model.LayoutDate2)
- }
- if cow.LastCalvingAt > 0 {
- calvingDate = time.Unix(cow.LastCalvingAt, 0).Local().Format(model.LayoutDate2)
- }
- milkDaily := &model.MilkDaily{
- CowId: cow.Id,
- Lact: cow.Lact,
- PastureId: cow.PastureId,
- EarNumber: cow.EarNumber,
- BirthDate: birthDate,
- CalvingDate: calvingDate,
- LactationAge: cow.LactationAge,
- HeatDate: recordDate.Format(model.LayoutDate2),
- PenId: cow.PenId,
- PenName: cow.PenName,
- }
- milkDailyList = append(milkDailyList, milkDaily)
- }
- if len(milkDailyList) > 0 {
- if err = e.DB.Model(new(model.MilkDaily)).Create(&milkDailyList).Error; err != nil {
- return err
- }
- }
- return nil
- }
|