Explorar el Código

calendar: 任务明细

Yi hace 6 meses
padre
commit
14353a8ea4

+ 2 - 1
config/app.develop.yaml

@@ -39,4 +39,5 @@ cron:
   generate_work_order: "0 05 1 * * ?"
   immunization_plan: "0 10 1 * * ?"
   same_time_plan: "0 15 1 * * ?"
-  update_same_time: "0 20 1 * * ?"
+  update_same_time: "0 20 1 * * ?"
+  system_basic_crontab: "0 25 1 * * ?"

+ 6 - 5
config/app.go

@@ -48,11 +48,12 @@ type CronSetting struct {
 	// 是否启动任务时先跑一次
 	CrontabStartRun bool `yaml:"crontab_start_run"`
 	// CRONTAB 表达式
-	UpdateCowInfo     string `yaml:"update_cow_info"`
-	GenerateWorkOrder string `yaml:"generate_work_order"`
-	ImmunizationPlan  string `yaml:"immunization_plan"`
-	SameTimePlan      string `yaml:"same_time_plan"`
-	UpdateSameTime    string `yaml:"update_same_time"`
+	UpdateCowInfo      string `yaml:"update_cow_info"`
+	GenerateWorkOrder  string `yaml:"generate_work_order"`
+	ImmunizationPlan   string `yaml:"immunization_plan"`
+	SameTimePlan       string `yaml:"same_time_plan"`
+	UpdateSameTime     string `yaml:"update_same_time"`
+	SystemBasicCrontab string `yaml:"system_basic_crontab"`
 }
 
 type JwtTokenKeyConfig struct {

+ 6 - 4
config/app.test.yaml

@@ -34,7 +34,9 @@ side_work_setting:
       default: 5
 cron:
   crontab_start_run: false
-  update_cow_info: "0 */1 * * * ?"
-  generate_work_order: "0 0 22 * * ?"
-  immunization_plan: "0 * * * * ?"
-  same_Time_plan: "0 */1 * * * ?"
+  update_cow_info: "0 01 1 * * ?"
+  generate_work_order: "0 05 1 * * ?"
+  immunization_plan: "0 10 1 * * ?"
+  same_time_plan: "0 15 1 * * ?"
+  update_same_time: "0 20 1 * * ?"
+  system_basic_crontab: "0 25 1 * * ?"

+ 5 - 0
dep/di_crontab.go

@@ -66,5 +66,10 @@ func EntryCrontab(dependency CrontabDependency) *cron.Crontab {
 	if err != nil {
 		panic(err)
 	}
+
+	err = newCrontab.Bind("SystemBasicCrontab", cs.SystemBasicCrontab, dependency.CrontabHub.SystemBasicCrontab)
+	if err != nil {
+		panic(err)
+	}
 	return newCrontab
 }

+ 1 - 1
go.mod

@@ -3,7 +3,7 @@ module kpt-pasture
 go 1.17
 
 require (
-	gitee.com/xuyiping_admin/go_proto v0.0.0-20240926071515-d412d36b2dbe
+	gitee.com/xuyiping_admin/go_proto v0.0.0-20240926092955-f27b0fa96718
 	gitee.com/xuyiping_admin/pkg v0.0.0-20231218082641-aac597b8a015
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible
 	github.com/eko/gocache v1.1.0

+ 6 - 0
go.sum

@@ -62,6 +62,12 @@ gitee.com/xuyiping_admin/go_proto v0.0.0-20240926070615-66351c94c78b h1:TQmLx5oT
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240926070615-66351c94c78b/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240926071515-d412d36b2dbe h1:KTW/BuoqG+FhFEI0/JlcVmVaY7WakAGZREks5IIvy8U=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240926071515-d412d36b2dbe/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240926084154-d8abda6634eb h1:bQqUYGb5aS9hF9CR8A4FEJUo7jjjvQWnyAy6qblT3qg=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240926084154-d8abda6634eb/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240926090848-43fc51acb679 h1:7gzz8oN4BRuloIjYQh6UsDneiYNQAj6kQJI77bYLJ+0=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240926090848-43fc51acb679/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240926092955-f27b0fa96718 h1:QB8QkNqfnXB/ox8wsIitfW1IXGEkvDVbi4GkcRgXxD8=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240926092955-f27b0fa96718/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/pkg v0.0.0-20231218082641-aac597b8a015 h1:dfb5dRd57L2HKjdwLT93UFmPYFPOmEl56gtZmqcNnaE=
 gitee.com/xuyiping_admin/pkg v0.0.0-20231218082641-aac597b8a015/go.mod h1:Fk4GYI/v0IK3XFrm1Gn+VkgCz5Y7mfswD5hsTJYOG6A=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=

+ 10 - 9
model/event_calving.go

@@ -1,6 +1,7 @@
 package model
 
 import (
+	"kpt-pasture/util"
 	"time"
 
 	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
@@ -12,9 +13,9 @@ type EventCalving struct {
 	EarNumber      string                        `json:"earNumber"`
 	Lact           int32                         `json:"lact"`
 	DayAge         int32                         `json:"dayAge"`
-	PlanDay        string                        `json:"planDay"`
-	RealityDay     string                        `json:"realityDay"`
-	EndDay         string                        `json:"endDay"`
+	PlanDay        int64                         `json:"planDay"`
+	RealityDay     int64                         `json:"realityDay"`
+	EndDay         int64                         `json:"endDay"`
 	PenId          int32                         `json:"penId"`
 	ChildNumber    int8                          `json:"childNumber"`
 	BullNumber     string                        `json:"bullNumber"`
@@ -32,21 +33,22 @@ func (e *EventCalving) TableName() string {
 	return "event_calving"
 }
 
-func NewEventCalving(cow *Cow, planDay int64) *EventCalving {
+func NewEventCalving(cow *Cow) *EventCalving {
 	return &EventCalving{
 		CowId:      cow.Id,
 		EarNumber:  cow.EarNumber,
 		Lact:       cow.Lact,
 		PenId:      cow.PenId,
 		BullNumber: cow.LastBullNumber,
-		PlanDay:    time.Unix(planDay, 0).Format(LayoutTime),
+		PlanDay:    util.TimeParseLocalUnix(time.Now().Format(LayoutTime)),
+		EndDay:     util.TimeParseLocalEndUnix(time.Now().Format(LayoutTime)),
 	}
 }
 
-func NewEventCalvingList(cowList []*Cow, planDay int64) []*EventCalving {
+func NewEventCalvingList(cowList []*Cow) []*EventCalving {
 	eventCalvingList := make([]*EventCalving, 0)
 	for _, cow := range cowList {
-		eventCalvingList = append(eventCalvingList, NewEventCalving(cow, planDay))
+		eventCalvingList = append(eventCalvingList, NewEventCalving(cow))
 	}
 	return eventCalvingList
 }
@@ -81,14 +83,13 @@ func (e EventCalvingListSlice) ToPB(req []*CalvingCalf) []*pasturePb.LavingList
 				Id:         int32(v.Id),
 			})
 		}
-		calvingDay, _ := time.Parse(LayoutTime, item.PlanDay)
 		list = append(list, &pasturePb.LavingList{
 			Id:             int32(item.Id),
 			CowId:          int32(item.CowId),
 			Lact:           item.Lact,
 			PenId:          item.PenId,
 			PenName:        item.PenName,
-			CalvingAt:      int32(calvingDay.Unix()),
+			CalvingAt:      int32(item.PlanDay),
 			ChildNumber:    int32(item.ChildNumber),
 			DaysPregnant:   int32(item.PregnancyAge),
 			OperationId:    int32(item.OperationId),

+ 77 - 0
model/event_item.go

@@ -0,0 +1,77 @@
+package model
+
+import (
+	"kpt-pasture/util"
+	"time"
+
+	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
+)
+
+type EventItem struct {
+	Id            int64                       `json:"id"`
+	CowId         int64                       `json:"cowId"`
+	PenId         int32                       `json:"penId"`
+	Lact          int32                       `json:"lact"`
+	CalendarType  pasturePb.CalendarType_Kind `json:"calendarType"`
+	PlanDay       int64                       `json:"planDay"`
+	EndDay        int64                       `json:"endDay"`
+	RealityDay    int64                       `json:"realityDay"`
+	IsFinish      pasturePb.IsShow_Kind       `json:"isFinish"`
+	IsExpire      pasturePb.IsShow_Kind       `json:"isExpire"`
+	OperationId   int64                       `json:"operationId"`
+	OperationName string                      `json:"operationName"`
+	Remarks       string                      `json:"remarks"`
+	CreatedAt     int64                       `json:"createdAt"`
+	UpdatedAt     int64                       `json:"updatedAt"`
+}
+
+func (e *EventItem) TableName() string {
+	return "event_item"
+}
+
+func NewEventItem(cow *Cow, calendarType pasturePb.CalendarType_Kind) *EventItem {
+	return &EventItem{
+		CowId:        cow.Id,
+		PenId:        cow.PenId,
+		Lact:         cow.Lact,
+		CalendarType: calendarType,
+		PlanDay:      util.TimeParseLocalUnix(time.Now().Format(LayoutDate2)),
+		EndDay:       util.TimeParseLocalEndUnix(time.Now().Format(LayoutDate2)),
+		IsFinish:     pasturePb.IsShow_Ok,
+	}
+}
+
+func NewEventItemList(cowList []*Cow, calendarType pasturePb.CalendarType_Kind) []*EventItem {
+	res := make([]*EventItem, len(cowList))
+	for i, v := range cowList {
+		res[i] = NewEventItem(v, calendarType)
+	}
+	return res
+}
+
+type EventItemSlice []*EventItem
+
+func (e EventItemSlice) ToPB(penMap map[int32]*Pen, calendarType map[pasturePb.CalendarType_Kind]string) []*pasturePb.CalendarToDoList {
+	res := make([]*pasturePb.CalendarToDoList, len(e))
+	for i, v := range e {
+		penName := ""
+		if pen, ok := penMap[v.PenId]; ok {
+			penName = pen.Name
+		}
+		res[i] = &pasturePb.CalendarToDoList{
+			Id:               int32(v.Id),
+			Lact:             v.Lact,
+			CalendarType:     v.CalendarType,
+			CalendarTypeName: calendarType[v.CalendarType],
+			PlanDay:          time.Unix(v.PlanDay, 0).Format(LayoutDate2),
+			EndDay:           time.Unix(v.EndDay, 0).Format(LayoutDate2),
+			RealityDay:       time.Unix(v.RealityDay, 0).Format(LayoutDate2),
+			IsFinish:         v.IsFinish,
+			IsExpire:         v.IsExpire,
+			CowId:            int32(v.CowId),
+			PenName:          penName,
+			Remarks:          v.Remarks,
+		}
+	}
+	return res
+}

+ 11 - 11
model/event_pregnant_check.go

@@ -1,6 +1,7 @@
 package model
 
 import (
+	"kpt-pasture/util"
 	"time"
 
 	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
@@ -12,9 +13,9 @@ type EventPregnantCheck struct {
 	DayAge              int32                              `json:"dayAge"`
 	Lact                int8                               `json:"lact"`
 	MatingAge           int32                              `json:"matingAge"`
-	PlanDay             string                             `json:"planDay"`
-	RealityDay          string                             `json:"realityDay"`
-	EndDay              string                             `json:"endDay"`
+	PlanDay             int64                              `json:"planDay"`
+	RealityDay          int64                              `json:"realityDay"`
+	EndDay              int64                              `json:"endDay"`
 	PregnantCheckName   string                             `json:"pregnantCheckName"`
 	PregnantCheckResult pasturePb.PregnantCheckResult_Kind `json:"pregnantCheckResult"`
 	PregnantCheckMethod pasturePb.PregnantCheckMethod_Kind `json:"pregnantCheckMethod"`
@@ -30,25 +31,25 @@ func (e *EventPregnantCheck) TableName() string {
 	return "event_pregnant_check"
 }
 
-func NewEventPregnantCheck(cow *Cow, pregnantCheckAt int64, pregnantCheckName string) *EventPregnantCheck {
+func NewEventPregnantCheck(cow *Cow, pregnantCheckName string) *EventPregnantCheck {
 	return &EventPregnantCheck{
 		CowId:             cow.Id,
 		DayAge:            cow.GetDayAge(),
 		Lact:              int8(cow.Lact),
-		PlanDay:           time.Unix(pregnantCheckAt, 0).Format(LayoutTime),
-		EndDay:            time.Unix(pregnantCheckAt, 0).Format(LayoutTime),
+		PlanDay:           util.TimeParseLocalUnix(time.Now().Format(LayoutDate2)),
+		EndDay:            util.TimeParseLocalEndUnix(time.Now().Format(LayoutDate2)),
 		PregnantCheckName: pregnantCheckName,
 		Status:            pasturePb.IsShow_No,
 	}
 }
 
-func NewEventPregnantCheckList(cowList []*Cow, pregnantCheckAt int64, pregnantCheckName string) []*EventPregnantCheck {
+func NewEventPregnantCheckList(cowList []*Cow, pregnantCheckName string) []*EventPregnantCheck {
 	res := make([]*EventPregnantCheck, len(cowList))
 	for i, cow := range cowList {
 		if cow.BreedStatus != pasturePb.BreedStatus_Breeding {
 			continue
 		}
-		res[i] = NewEventPregnantCheck(cow, pregnantCheckAt, pregnantCheckName)
+		res[i] = NewEventPregnantCheck(cow, pregnantCheckName)
 	}
 	return res
 }
@@ -61,13 +62,12 @@ func (e EventPregnantCheckSlice) ToPB(
 ) []*pasturePb.SearchPregnantCheckList {
 	result := make([]*pasturePb.SearchPregnantCheckList, len(e))
 	for i, v := range e {
-		pregnantCheckAt, _ := time.Parse(LayoutTime, v.PlanDay)
 		result[i] = &pasturePb.SearchPregnantCheckList{
 			Id:                      int32(v.Id),
 			CowId:                   int32(v.CowId),
 			DayAge:                  v.DayAge,
 			Lact:                    int32(v.Lact),
-			PregnantCheckAt:         int32(pregnantCheckAt.Unix()),
+			PregnantCheckAt:         int32(v.PlanDay),
 			PregnantCheckResult:     v.PregnantCheckResult,
 			PregnantCheckResultName: pregnantCheckResultMap[v.PregnantCheckResult],
 			PregnantCheckMethod:     v.PregnantCheckMethod,
@@ -112,7 +112,7 @@ func (e EventPregnantCheckSlice) ToPB2() []*PregnantCheckBody {
 			CowId:     v.CowId,
 			DayAge:    int64(v.DayAge),
 			Lact:      int32(v.Lact),
-			PlanDay:   v.PlanDay,
+			PlanDay:   time.Unix(v.PlanDay, 0).Format(LayoutDate2),
 			CheckName: PregnantCheckNameMap[v.PregnantCheckName],
 		}
 	}

+ 9 - 8
model/event_weaning.go

@@ -1,6 +1,7 @@
 package model
 
 import (
+	"kpt-pasture/util"
 	"time"
 
 	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
@@ -9,9 +10,9 @@ import (
 type EventWeaning struct {
 	Id            int64                 `json:"id"`
 	CowId         int64                 `json:"cowId"`
-	PlanDay       string                `json:"planDay"`
-	EndDay        string                `json:"endDay"`
-	RealityDay    string                `json:"realityDay"`
+	PlanDay       int64                 `json:"planDay"`
+	EndDay        int64                 `json:"endDay"`
+	RealityDay    int64                 `json:"realityDay"`
 	Status        pasturePb.IsShow_Kind `json:"status"`
 	BeforePenId   int32                 `json:"beforePenId"`
 	AfterPenId    int32                 `json:"afterPenId"`
@@ -27,20 +28,20 @@ func (c *EventWeaning) TableName() string {
 	return "event_weaning"
 }
 
-func NewEventWeaning(cowId int64, planDay int64, penId int32) *EventWeaning {
+func NewEventWeaning(cowId int64, penId int32) *EventWeaning {
 	return &EventWeaning{
 		CowId:       cowId,
-		PlanDay:     time.Unix(planDay, 0).Format(LayoutDate2),
-		EndDay:      time.Unix(planDay, 0).Format(LayoutDate2),
+		PlanDay:     util.TimeParseLocalUnix(time.Now().Format(LayoutDate2)),
+		EndDay:      util.TimeParseLocalEndUnix(time.Now().Format(LayoutDate2)),
 		Status:      pasturePb.IsShow_No,
 		BeforePenId: penId,
 	}
 }
 
-func NewEventWeaningList(cowList []*Cow, planDay int64) []*EventWeaning {
+func NewEventWeaningList(cowList []*Cow) []*EventWeaning {
 	var weaningList = make([]*EventWeaning, 0)
 	for _, cow := range cowList {
-		weaningList = append(weaningList, NewEventWeaning(cow.Id, planDay, cow.PenId))
+		weaningList = append(weaningList, NewEventWeaning(cow.Id, cow.PenId))
 	}
 	return weaningList
 }

+ 0 - 45
model/work_order_list.go

@@ -1,45 +0,0 @@
-package model
-
-import (
-	"kpt-pasture/util"
-	"time"
-
-	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
-)
-
-type WorkOrderList struct {
-	Id           int64                 `json:"id"`
-	CalendarId   int64                 `json:"calendarId"`
-	Name         string                `json:"name"`
-	CowId        int64                 `json:"cowId"`
-	StartAt      int64                 `json:"startAt"`
-	FinishAt     int64                 `json:"finishAt"`
-	EndAt        int64                 `json:"endAt"`
-	DisUserId    int64                 `json:"disUserId"`
-	ExecUserId   int64                 `json:"execUserId"`
-	IsCompletion pasturePb.IsShow_Kind `json:"isCompletion"`
-	IsShow       pasturePb.IsShow_Kind `json:"isShow"`
-	Remarks      string                `json:"remarks"`
-	CreatedAt    int64                 `json:"createdAt"`
-	UpdatedAt    int64                 `json:"updatedAt"`
-}
-
-func (w *WorkOrderList) TableName() string {
-	return "work_order_list"
-}
-
-func NewWorkOrderList(name string, calendarId, cowId int64) *WorkOrderList {
-	return &WorkOrderList{
-		CalendarId:   calendarId,
-		Name:         name,
-		CowId:        cowId,
-		StartAt:      util.TimeParseLocalUnix(time.Now().Format(LayoutDate2)),
-		FinishAt:     0,
-		EndAt:        0,
-		DisUserId:    0,
-		ExecUserId:   0,
-		IsCompletion: pasturePb.IsShow_No,
-		IsShow:       pasturePb.IsShow_Ok,
-		Remarks:      "",
-	}
-}

+ 44 - 11
module/backend/calendar.go

@@ -17,25 +17,58 @@ func (s *StoreEntry) CalendarToDoList(ctx context.Context, req *pasturePb.Calend
 	if err != nil || currentUser.Id <= 0 {
 		return nil, xerr.WithStack(err)
 	}
+	var count int64 = 0
+	eventItem := make([]*model.EventItem, 0)
+	pref := s.DB.Model(&model.EventItem{})
+	if req.StartAt > 0 && req.EndAt > 0 && req.StartAt <= req.EndAt {
+		pref = pref.Where("plan_day >= ?", req.StartAt).
+			Where("plan_day <= ?", req.EndAt)
+	}
+
+	if len(req.CowIds) > 0 {
+		cowList, _ := s.ParseCowIds(ctx, req.CowIds)
+		cowIds := make([]int64, 0)
+		for _, cow := range cowList {
+			cowIds = append(cowIds, cow.Id)
+		}
+		if len(cowIds) > 0 {
+			pref.Where("cow_id IN (?)", cowIds)
+		}
 
-	calendarList := make([]*model.Calendar, 0)
-	nowDayTime := time.Now().Format(model.LayoutDate2)
-	if err = s.DB.Model(&model.Calendar{}).
-		Where("show_day == ?", nowDayTime).
-		Where("is_show = ?", pasturePb.IsShow_Ok).
-		Find(&calendarList).Error; err != nil {
-		return nil, xerr.WithStack(err)
 	}
 
-	for _, v := range calendarList {
-		// todo 待办列表
-		fmt.Println(v)
+	if req.CalendarType > pasturePb.CalendarType_Invalid {
+		pref.Where("calendar_type = ?", req.CalendarType)
 	}
 
+	if req.IsFinish > 0 {
+		pref.Where("is_finish = ?", req.IsFinish)
+	}
+
+	if req.IsExpire > 0 {
+		pref.Where("is_expire = ?", req.IsExpire)
+	}
+
+	if err = pref.Order("id desc").
+		Count(&count).
+		Limit(int(pagination.PageSize)).
+		Offset(int(pagination.PageOffset)).
+		Find(&eventItem).Error; err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	penMap := s.PenMap(ctx)
+	calendarMap := CalendarTypeMap()
+
 	return &pasturePb.CalendarToDoResponse{
 		Code:    http.StatusOK,
 		Message: "ok",
-		Data:    nil,
+		Data: &pasturePb.CalendarToDoData{
+			List:     model.EventItemSlice(eventItem).ToPB(penMap, calendarMap),
+			Total:    int32(count),
+			PageSize: pagination.PageSize,
+			Page:     pagination.Page,
+		},
 	}, nil
 }
 func (s *StoreEntry) CalendarList(ctx context.Context, req *pasturePb.CalendarRequest) (*pasturePb.CalendarResponse, error) {

+ 1 - 0
module/backend/enum_options.go

@@ -160,6 +160,7 @@ func (s *StoreEntry) SystemBaseConfigOptions(ctx context.Context, optionsName st
 		"immunizationConditions": s.ImmunizationConditionsEnumList,
 		"abortionReasons":        s.AbortionReasonsEnumList,
 		"healthStatus":           s.HealthStatusEnumList,
+		"calendarType":           CalendarTypeEnumList,
 	}
 
 	getConfigFunc, ok := getConfigFuncMap[optionsName]

+ 4 - 1
module/backend/sql.go

@@ -117,7 +117,10 @@ func (s *StoreEntry) GetCowInfoByCowId(ctx context.Context, cowId int64) (*model
 
 func (s *StoreEntry) GetCowInfoByCowIds(ctx context.Context, cowIds []int64) ([]*model.Cow, error) {
 	cowList := make([]*model.Cow, 0)
-	if err := s.DB.Model(&model.Cow{}).Where("is_remove = ?", pasturePb.IsShow_Ok).Find(&cowList).Error; err != nil {
+	if err := s.DB.Model(&model.Cow{}).
+		Where("is_remove = ?", pasturePb.IsShow_Ok).
+		Where("id IN ?", cowIds).
+		Find(&cowList).Error; err != nil {
 		return nil, xerr.WithStack(err)
 	}
 	return cowList, nil

+ 4 - 4
module/consumer/consumer.go

@@ -7,10 +7,10 @@ import (
 	"kpt-pasture/model"
 	"kpt-pasture/util"
 
-	"gorm.io/gorm"
-
 	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
 
+	"gorm.io/gorm"
+
 	"gitee.com/xuyiping_admin/pkg/logger/zaplog"
 	"gitee.com/xuyiping_admin/pkg/xerr"
 	"go.uber.org/zap"
@@ -34,9 +34,9 @@ func (entry *Entry) DayWorkOrder(ctx context.Context, t *asynq.Task) error {
 
 	localExecTime, _ := util.ConvertParseLocalUnix(workOrder.ExecTime)
 	workOrderSubList := make([]*model.WorkOrderSub, 0)
-	if err := entry.DB.Where("work_order_master_id = ?", req.WorkOrderId).
+	if err := entry.DB.Where("is_show = ?", pasturePb.IsShow_Ok).
+		Where("work_order_master_id = ?", req.WorkOrderId).
 		Where("exec_time = ?", localExecTime).
-		Where("is_show = ?", pasturePb.IsShow_Ok).
 		Find(&workOrderSubList).Error; err != nil {
 		if !errors.Is(err, gorm.ErrRecordNotFound) {
 			zaplog.Error("consumer", zap.Any("mark", "DayWorkOrder"), zap.Any("WorkOrderSub", err))

+ 34 - 15
module/crontab/cow_cron.go

@@ -8,6 +8,8 @@ import (
 	"kpt-pasture/util"
 	"time"
 
+	"gorm.io/gorm"
+
 	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
 	"gitee.com/xuyiping_admin/pkg/logger/zaplog"
 	"gitee.com/xuyiping_admin/pkg/xerr"
@@ -15,10 +17,11 @@ import (
 )
 
 const (
-	UpdateCowInfo    = "UpdateCowInfo"
-	ImmunizationPlan = "ImmunizationPlan"
-	SameTimePlan     = "SameTimePlan"
-	WorkOrderMaster  = "WorkOrderMaster"
+	UpdateCowInfo      = "UpdateCowInfo"
+	ImmunizationPlan   = "ImmunizationPlan"
+	SameTimePlan       = "SameTimePlan"
+	WorkOrderMaster    = "WorkOrderMaster"
+	SystemBasicCrontab = "SystemBasicCrontab"
 )
 
 // GenerateAsynqWorkOrder 异步生成工作单
@@ -44,7 +47,6 @@ func (e *Entry) GenerateAsynqWorkOrder() error {
 			continue
 		}
 		execTime := timeUnix - nowTime
-
 		task := model.NewTaskWorkOrderPayload(workOrder.Id, time.Duration(execTime)*time.Second)
 		if _, err = e.AsynqClient.CtxEnqueue(context.Background(), task); err != nil {
 			zaplog.Error("PushMessage CtxEnqueue", zap.Any("Err", err))
@@ -142,7 +144,19 @@ func (e *Entry) ImmunizationPlan() error {
 		}
 		todayCount += int32(len(cowList))
 		newImmunizationPlanCowList := model.NewCowImmunizationPlanList(cowList, plan)
-		if err := e.DB.Create(newImmunizationPlanCowList).Error; err != nil {
+		newEventItemList := model.NewEventItemList(cowList, pasturePb.CalendarType_Immunisation)
+		if err := e.DB.Transaction(func(tx *gorm.DB) error {
+			if err := tx.Create(newImmunizationPlanCowList).Error; err != nil {
+				return xerr.WithStack(err)
+
+			}
+
+			if err := tx.Create(newEventItemList).Error; err != nil {
+				return xerr.WithStack(err)
+			}
+
+			return nil
+		}); err != nil {
 			zaplog.Error("ImmunizationPlan", zap.Any("newImmunizationPlanCowList", err), zap.Any("plan", plan), zap.Any("cowList", cowList))
 		}
 	}
@@ -256,8 +270,14 @@ func (e *Entry) UpdateSameTime() error {
 	return nil
 }
 
-// PregnancyCheck 妊娠期检查
-func (e *Entry) PregnancyCheck() error {
+// SystemBasicCrontab 基础配置计划任务
+func (e *Entry) SystemBasicCrontab() error {
+	if ok := e.IsExistCrontabLog(SystemBasicCrontab); ok {
+		return nil
+	}
+	defer func() {
+		e.CreateCrontabLog(SystemBasicCrontab)
+	}()
 	systemBasicList := make([]*model.SystemBasic, 0)
 	if err := e.DB.Model(new(model.SystemBasic)).
 		Where("is_show = ?", pasturePb.IsShow_Ok).
@@ -272,7 +292,6 @@ func (e *Entry) PregnancyCheck() error {
 	}
 
 	currWeekValue := time.Now().Weekday()
-	planDay := time.Now().Unix()
 	for _, v := range systemBasicList {
 		// 周执行
 		if v.WeekValue >= 0 && time.Weekday(v.WeekValue) != currWeekValue {
@@ -288,6 +307,7 @@ func (e *Entry) PregnancyCheck() error {
 		case model.PregnantCheckForSecond: // 过滤初检空怀的牛只
 			pref.Where("breed_status = ?", pasturePb.BreedStatus_Pregnant)
 		case model.WeaningAge:
+			pref.Where("day_age = ?", v.MinValue)
 		case model.PregnancyAge:
 			pref.Where("pregnancy_age >= ?", v.MinValue).
 				Where("breed_status = ?", pasturePb.BreedStatus_Pregnant)
@@ -310,27 +330,26 @@ func (e *Entry) PregnancyCheck() error {
 		if len(cowList) <= 0 {
 			continue
 		}
-
-		e.InitEventData(cowList, v.Name, planDay)
+		e.InitEventData(cowList, v.Name)
 	}
 
 	return nil
 }
 
-func (e *Entry) InitEventData(cowList []*model.Cow, systemBasicName string, planDay int64) {
+func (e *Entry) InitEventData(cowList []*model.Cow, systemBasicName string) {
 	switch systemBasicName {
 	case model.PregnantCheckForFirst, model.PregnantCheckForSecond:
-		eventPregnantCheckDataList := model.NewEventPregnantCheckList(cowList, planDay, systemBasicName)
+		eventPregnantCheckDataList := model.NewEventPregnantCheckList(cowList, systemBasicName)
 		if err := e.DB.Create(eventPregnantCheckDataList).Error; err != nil {
 			zaplog.Error("crontab", zap.Any("InitEventData", err), zap.Any("eventPregnantCheckDataList", eventPregnantCheckDataList))
 		}
 	case model.WeaningAge:
-		eventWeaningDataList := model.NewEventWeaningList(cowList, planDay)
+		eventWeaningDataList := model.NewEventWeaningList(cowList)
 		if err := e.DB.Create(eventWeaningDataList).Error; err != nil {
 			zaplog.Error("crontab", zap.Any("InitEventData", err), zap.Any("eventWeaningDataList", eventWeaningDataList))
 		}
 	case model.PregnancyAge:
-		eventCalvingList := model.NewEventCalvingList(cowList, planDay)
+		eventCalvingList := model.NewEventCalvingList(cowList)
 		if err := e.DB.Create(eventCalvingList).Error; err != nil {
 			zaplog.Error("crontab", zap.Any("InitEventData", err), zap.Any("eventCalvingList", eventCalvingList))
 		}

+ 1 - 1
module/crontab/interface.go

@@ -32,5 +32,5 @@ type Crontab interface {
 	ImmunizationPlan() error
 	SameTimePlan() error
 	UpdateSameTime() error
-	PregnancyCheck() error
+	SystemBasicCrontab() error
 }

+ 7 - 2
module/crontab/work_cron.go

@@ -38,6 +38,7 @@ func (e *Entry) GenerateCalendarBySameTimePlan(cowList []*model.Cow, sameTime *m
 	newSameTimeCowDetailList := make([]*model.EventCowSameTime, 0)
 	newEventMatingList := make([]*model.EventMating, 0)
 	collateNodes := make([]*pasturePb.CollateNode, 0)
+	newEventItemList := make([]*model.EventItem, 0)
 	var _ = json.Unmarshal([]byte(sameTime.CollateNodes), &collateNodes)
 	nowTime := time.Now()
 	for i, collateNode := range collateNodes {
@@ -54,12 +55,13 @@ func (e *Entry) GenerateCalendarBySameTimePlan(cowList []*model.Cow, sameTime *m
 			calendarType = pasturePb.CalendarType_Mating
 			histCount = e.GetTowardTaiCowSum()
 			newEventMatingList = append(newEventMatingList, model.NewEventMatingList(newCowList, showDay)...)
+			newEventItemList = append(newEventItemList, model.NewEventItemList(newCowList, calendarType)...)
 		} else {
 			if collateNode.SameTimeType == pasturePb.SameTimeType_RnGH {
 				calendarName = backend.CalendarTypeMap()[pasturePb.CalendarType_RnGH]
 				calendarType = pasturePb.CalendarType_RnGH
 			}
-
+			newEventItemList = append(newEventItemList, model.NewEventItemList(newCowList, calendarType)...)
 			histCount = e.GetTowardSameTimeCowSum(sameTime.Id, collateNode.SameTimeType)
 			newSameTimeCowDetailList = append(
 				newSameTimeCowDetailList,
@@ -77,7 +79,6 @@ func (e *Entry) GenerateCalendarBySameTimePlan(cowList []*model.Cow, sameTime *m
 	}
 
 	newSameTimeCowList := model.NewCowSameTimeList(newCowList, sameTime)
-
 	if err := e.DB.Transaction(func(tx *gorm.DB) error {
 		// 创建牛只同期日历表
 		if err := tx.Create(calendarList).Error; err != nil {
@@ -95,6 +96,10 @@ func (e *Entry) GenerateCalendarBySameTimePlan(cowList []*model.Cow, sameTime *m
 		if err := tx.Create(newEventMatingList).Error; err != nil {
 			return xerr.WithStack(err)
 		}
+		// 创建牛只事件表
+		if err := tx.Create(newEventItemList).Error; err != nil {
+			return xerr.WithStack(err)
+		}
 		return nil
 	}); err != nil {
 		return 0, xerr.WithStack(err)