Parcourir la source

event: neckRingHealth update

Yi il y a 1 semaine
Parent
commit
934f3d9b8c

+ 13 - 0
http/handler/warning/warning.go

@@ -3,6 +3,7 @@ package warning
 import (
 	"kpt-pasture/http/middleware"
 	"net/http"
+	"strconv"
 
 	operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
 	"gitee.com/xuyiping_admin/pkg/valid"
@@ -108,3 +109,15 @@ func NeckRingNoHealthBatch(c *gin.Context) {
 		Data: &operationPb.Success{Success: true},
 	})
 }
+
+func DataNoticeDetail(c *gin.Context) {
+	res := middleware.BackendOperation(c).OpsService.DataNoticeDetail(c)
+	c.JSON(http.StatusOK, res)
+}
+
+func DataNoticeKnown(c *gin.Context) {
+	idStr := c.Param("id")
+	dataNoticeId, _ := strconv.Atoi(idStr)
+	res := middleware.BackendOperation(c).OpsService.DataNoticeKnown(c, int64(dataNoticeId))
+	c.JSON(http.StatusOK, res)
+}

+ 1 - 1
http/route/pasture_api.go

@@ -44,7 +44,7 @@ func PastureManageAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		// 免疫计划相关
 		pastureRoute.POST("/immunization/plan/list", pasture.SearchImmunizationList)
 		pastureRoute.POST("/immunization/plan/createOrUpdate", pasture.CreatedOrUpdateImmunization)
-		pastureRoute.PUT("/immunization/is_show/:id", pasture.ImmunizationIsShow)
+		pastureRoute.PUT("/immunization/isShow/:id", pasture.ImmunizationIsShow)
 
 		// 同期相关
 		pastureRoute.POST("/same/time/createOrUpdate", pasture.SameTimeCreatedOrUpdate)

+ 1 - 1
http/route/system_api.go

@@ -33,7 +33,7 @@ func SystemAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		// 系统角色
 		systemRoute.POST("/role/list", system.SearchSystemRoleList)
 		systemRoute.DELETE("/role/:id", system.DeleteSystemRole)
-		systemRoute.PUT("/role/is_show/:id", system.IsShowSystemRole)
+		systemRoute.PUT("/role/isShow/:id", system.IsShowSystemRole)
 		systemRoute.POST("/role/createOrUpdate", system.RoleCreateOrUpdate)
 		systemRoute.GET("/role/menu/:id", system.GetRoleMenu)
 		systemRoute.POST("/role/menu/save", system.RoleMenuSave)

+ 2 - 0
http/route/warning_api.go

@@ -19,5 +19,7 @@ func WarningAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		waringRoute.POST("/no/estrus/batch", warning.NeckRingNoEstrusBatch)
 		waringRoute.POST("/health/items", warning.NeckRingWarningHealthItem)
 		waringRoute.POST("/no/disease/batch", warning.NeckRingNoHealthBatch)
+		waringRoute.GET("/data/notice", warning.DataNoticeDetail)
+		waringRoute.PUT("/data/notice/known/:id", warning.DataNoticeKnown)
 	}
 }

+ 66 - 0
model/data_notice.go

@@ -0,0 +1,66 @@
+package model
+
+import (
+	"kpt-pasture/util"
+	"strconv"
+	"strings"
+)
+
+type DataNotice struct {
+	Id         int64  `json:"id"`
+	PastureId  int64  `json:"pastureId"`
+	Title      string `json:"title"`
+	Content    string `json:"content"`
+	KnownUsers string `json:"knownUsers"`
+	StartDate  string `json:"startDate"`
+	EndDate    string `json:"endDate"`
+	IsShow     int32  `json:"isShow"`
+	CreatedAt  int64  `json:"createdAt"`
+	UpdatedAt  int64  `json:"updatedAt"`
+}
+
+func (d *DataNotice) TableName() string {
+	return "data_notice"
+}
+
+func (d *DataNotice) GetUserIds() []int64 {
+	userIds := make([]int64, 0)
+	if d.KnownUsers != "" {
+		userIdStr := strings.Split(d.KnownUsers, ",")
+		for _, u := range userIdStr {
+			uId, _ := strconv.ParseInt(u, 10, 64)
+			userIds = append(userIds, uId)
+		}
+	}
+	return userIds
+}
+
+type DataNoticeSlice []*DataNotice
+
+func (d DataNoticeSlice) ToPB(currentUserId int64) []*NoticeContent {
+	res := make([]*NoticeContent, 0)
+	for _, v := range d {
+		uIds := v.GetUserIds()
+		if len(uIds) > 0 && util.InArray(currentUserId, uIds) {
+			continue
+		}
+		res = append(res, &NoticeContent{
+			Id:      v.Id,
+			Title:   v.Title,
+			Content: v.Content,
+		})
+	}
+	return res
+}
+
+type DataNoticeResponse struct {
+	Code int32            `json:"code"`
+	Msg  string           `json:"msg"`
+	Data []*NoticeContent `json:"data"`
+}
+
+type NoticeContent struct {
+	Id      int64  `json:"id"`
+	Title   string `json:"title"`
+	Content string `json:"content"`
+}

+ 24 - 23
model/event_cow_disease.go

@@ -87,29 +87,30 @@ func (e *EventCowDisease) EventCurableUpdate(cureAt int64) {
 
 func NewEventCowDisease(pastureId int64, cow *Cow, disease *Disease, req *pasturePb.EventCowDiseaseRequest, operation, currUser *SystemUser) *EventCowDisease {
 	return &EventCowDisease{
-		PastureId:       pastureId,
-		CowId:           cow.Id,
-		EarNumber:       cow.EarNumber,
-		CowType:         cow.CowType,
-		Lact:            cow.Lact,
-		DayAge:          cow.DayAge,
-		DiseaseId:       int32(disease.Id),
-		DiseaseName:     disease.Name,
-		DiseaseType:     disease.DiseaseType,
-		DiseaseTypeName: disease.DiseaseTypeName,
-		PenId:           cow.PenId,
-		PenName:         cow.PenName,
-		HealthStatus:    pasturePb.HealthStatus_Health,
-		DiseaseAt:       int64(req.DiseaseAt),
-		Temperature:     int32(req.Temperature * 10),
-		OperationId:     int32(operation.Id),
-		OperationName:   operation.Name,
-		MessageId:       int32(currUser.Id),
-		MessageName:     currUser.Name,
-		Remarks:         req.Remarks,
-		DiagnosedResult: pasturePb.IsShow_No,
-		Source:          SourceApp,
-		DiagnosedAt:     int64(req.DiseaseAt),
+		PastureId:         pastureId,
+		CowId:             cow.Id,
+		EarNumber:         cow.EarNumber,
+		CowType:           cow.CowType,
+		Lact:              cow.Lact,
+		DayAge:            cow.DayAge,
+		DiseaseId:         int32(disease.Id),
+		DiseaseName:       disease.Name,
+		DiseaseType:       disease.DiseaseType,
+		DiseaseTypeName:   disease.DiseaseTypeName,
+		PenId:             cow.PenId,
+		PenName:           cow.PenName,
+		HealthStatus:      pasturePb.HealthStatus_Health,
+		DiseaseAt:         int64(req.DiseaseAt),
+		Temperature:       int32(req.Temperature * 10),
+		OperationId:       int32(operation.Id),
+		OperationName:     operation.Name,
+		MessageId:         int32(currUser.Id),
+		MessageName:       currUser.Name,
+		Remarks:           req.Remarks,
+		DiagnosedResult:   pasturePb.IsShow_No,
+		Source:            SourceApp,
+		DiagnosedAt:       int64(req.DiseaseAt),
+		ExposeDiseaseType: req.ExposeDiseaseType,
 	}
 }
 

+ 14 - 2
model/neck_ring_health.go

@@ -1,6 +1,10 @@
 package model
 
-import pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
+import (
+	"time"
+
+	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
+)
 
 const (
 	MinScore = 1
@@ -42,10 +46,18 @@ type NeckRingHealth struct {
 	UpdatedAt          int64                      `json:"updatedAt"`
 }
 
-func (h *NeckRingHealth) TableName() string {
+func (n *NeckRingHealth) TableName() string {
 	return "neck_ring_health"
 }
 
+func (n *NeckRingHealth) EventDiseaseUpdate(operationUser *SystemUser) {
+	n.IsShow = pasturePb.IsShow_No
+	n.CheckResult = pasturePb.CheckResult_Correct
+	n.CheckUserId = operationUser.Id
+	n.CheckUserName = operationUser.Name
+	n.CreatedAt = time.Now().Local().Unix()
+}
+
 func NewNeckRingHealth(habit *NeckActiveHabit, sumChew, chew3dago int32) *NeckRingHealth {
 	return &NeckRingHealth{
 		PastureId:          habit.PastureId,

+ 4 - 0
model/neck_ring_health_warning.go

@@ -26,6 +26,10 @@ func (n *NeckRingHealthWarning) TableName() string {
 	return "neck_ring_health_warning"
 }
 
+func (n *NeckRingHealthWarning) EventDiseaseUpdate() {
+	n.IsShow = pasturePb.IsShow_No
+}
+
 func NewNeckRingHealthWarning(pastureId int64, neckRingHealth *NeckRingHealth, cow *Cow, newScore int32) *NeckRingHealthWarning {
 	level := pasturePb.WarningHealthLevel_Preliminary
 	if newScore < 60 {

+ 129 - 317
module/backend/event_health.go

@@ -2,11 +2,9 @@ package backend
 
 import (
 	"context"
-	"errors"
 	"fmt"
 	"kpt-pasture/model"
 	"net/http"
-	"strings"
 	"time"
 
 	"gitee.com/xuyiping_admin/pkg/logger/zaplog"
@@ -18,14 +16,75 @@ import (
 	"gitee.com/xuyiping_admin/pkg/xerr"
 )
 
+// CowDiseaseList 发病牛只清单
+func (s *StoreEntry) CowDiseaseList(ctx context.Context, req *pasturePb.SearchEventCowTreatmentRequest, pagination *pasturePb.PaginationModel) (*pasturePb.EventCowDiseaseResponse, error) {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	cowDiseaseList := make([]*model.EventCowDisease, 0)
+	var count int64 = 0
+	pref := s.DB.Table(fmt.Sprintf("%s as a", new(model.EventCowDisease).TableName())).
+		Joins(fmt.Sprintf("JOIN %s AS b on a.cow_id = b.id", new(model.Cow).TableName())).
+		Select("a.*,b.pen_name").
+		Where("a.pasture_id = ?", userModel.AppPasture.Id).
+		Where("a.health_status != ?", pasturePb.HealthStatus_Curable)
+
+	if len(req.CowIds) > 0 {
+		pref.Where("a.cow_id IN ?", req.CowIds)
+	}
+
+	if req.EarNumber != "" {
+		pref.Where("a.ear_number = ?", req.EarNumber)
+	}
+
+	if req.DiseaseId > 0 {
+		pref.Where("a.disease_id = ?", req.DiseaseId)
+	}
+
+	if req.PenId > 0 {
+		pref.Where("b.pen_id = ?", req.PenId)
+	}
+
+	if req.HealthStatus > 0 {
+		pref.Where("a.health_status = ?", req.HealthStatus)
+	}
+
+	if req.DiseasedStartAt > 0 && req.DiseaseEndAt > 0 && req.DiseaseEndAt >= req.DiseasedStartAt {
+		pref.Where("a.disease_at BETWEEN ? AND ?", req.DiseasedStartAt, req.DiseaseEndAt)
+	}
+
+	if err = pref.Order("a.id DESC").
+		Count(&count).Limit(int(pagination.PageSize)).
+		Offset(int(pagination.PageOffset)).
+		Find(&cowDiseaseList).Error; err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	healthStatusMap := s.HealthStatusMap()
+	return &pasturePb.EventCowDiseaseResponse{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: &pasturePb.EventCowDiseaseData{
+			List:     model.EventCowDiseaseSlice(cowDiseaseList).ToPB(healthStatusMap),
+			Total:    int32(count),
+			PageSize: pagination.PageSize,
+			Page:     pagination.Page,
+		},
+	}, nil
+}
+
 // CowDiseaseCreate 牛只发病提交
 func (s *StoreEntry) CowDiseaseCreate(ctx context.Context, req *pasturePb.EventCowDiseaseRequest, source string) error {
 	userModel, err := s.GetUserModel(ctx)
 	if err != nil {
 		return xerr.WithStack(err)
 	}
+
+	pastureId := userModel.AppPasture.Id
 	// 牛只信息
-	cow, err := s.GetCowInfoByEarNumber(ctx, userModel.AppPasture.Id, req.EarNumber)
+	cow, err := s.GetCowInfoByEarNumber(ctx, pastureId, req.EarNumber)
 	if err != nil {
 		return xerr.Customf("牛只信息错误: %d", req.CowId)
 	}
@@ -35,14 +94,14 @@ func (s *StoreEntry) CowDiseaseCreate(ctx context.Context, req *pasturePb.EventC
 		return xerr.Customf("请检查操作人信息")
 	}
 
-	disease, err := s.GetDiseaseById(ctx, userModel.AppPasture.Id, req.DiseaseId)
+	disease, err := s.GetDiseaseById(ctx, pastureId, req.DiseaseId)
 	if err != nil {
 		return xerr.WithStack(err)
 	}
-	newEventCowDisease := model.NewEventCowDisease(userModel.AppPasture.Id, cow, disease, req, operationUser, userModel.SystemUser)
-	if req.ExposeDiseaseType == pasturePb.ExposeDiseaseType_Neck_Ring {
-		newEventCowDisease.ExposeDiseaseType = pasturePb.ExposeDiseaseType_Neck_Ring
-	}
+
+	// 牛只疾病信息
+	newEventCowDisease := model.NewEventCowDisease(pastureId, cow, disease, req, operationUser, userModel.SystemUser)
+
 	defer func() {
 		// 更新牛只健康状态
 		if newEventCowDisease.HealthStatus == pasturePb.HealthStatus_Disease || newEventCowDisease.HealthStatus == pasturePb.HealthStatus_Treatment {
@@ -55,6 +114,7 @@ func (s *StoreEntry) CowDiseaseCreate(ctx context.Context, req *pasturePb.EventC
 			}
 		}
 
+		// 更新栏舍信息
 		if req.PenId > 0 {
 			penMap := s.PenMap(ctx, userModel.AppPasture.Id)
 			penData, ok := penMap[req.PenId]
@@ -70,7 +130,7 @@ func (s *StoreEntry) CowDiseaseCreate(ctx context.Context, req *pasturePb.EventC
 			}
 		}
 	}()
-	// PC端直接跳过诊断过程
+	// PC端h和脖环揭发直接跳过诊断过程
 	if source == model.SourcePC || req.ExposeDiseaseType == pasturePb.ExposeDiseaseType_Neck_Ring {
 		newEventCowDisease.DiagnosedResult = pasturePb.IsShow_Ok
 		newEventCowDisease.DiagnoseOperationId = int32(operationUser.Id)
@@ -90,31 +150,53 @@ func (s *StoreEntry) CowDiseaseCreate(ctx context.Context, req *pasturePb.EventC
 		newEventCowDisease.DiagnoseName = disease.Name
 	}
 
-	newEventCowTreatment := &model.EventCowTreatment{}
-	newCowTreatmentRequest := &pasturePb.CowTreatmentRequest{}
-	var isCreatePrescription bool
-	diseaseTypeMap := s.DiseaseTypeMap()
 	prescription := &model.Prescription{}
-	if req.PrescriptionId > 0 || len(req.PrescriptionDetail) > 0 {
-		isCreatePrescription = true
-		if req.PrescriptionId > 0 {
-			prescription, err = s.GetPrescriptionById(ctx, userModel.AppPasture.Id, req.PrescriptionId)
-			if err != nil {
-				return xerr.WithStack(err)
-			}
+	prescriptionDetail := make([]*pasturePb.PrescriptionDrugsList, 0)
+	// 获取处方信息
+	if req.PrescriptionId > 0 && len(req.PrescriptionDetail) <= 0 {
+		prescription, err = s.GetPrescriptionById(ctx, pastureId, req.PrescriptionId)
+		if err != nil {
+			return xerr.WithStack(err)
+		}
 
-			prescriptionDrugs, err := s.PrescriptionDrugsByPrescriptionId(ctx, userModel.AppPasture.Id, prescription.Id)
-			if err != nil {
-				return xerr.WithStack(err)
-			}
-			req.PrescriptionDetail = model.PrescriptionDrugsSlice(prescriptionDrugs).ToPB()
+		prescriptionDrugs, err := s.PrescriptionDrugsByPrescriptionId(ctx, pastureId, prescription.Id)
+		if err != nil {
+			return xerr.WithStack(err)
 		}
+		prescriptionDetail = model.PrescriptionDrugsSlice(prescriptionDrugs).ToPB()
 	}
+
+	// 创建新的处方
+	if req.PrescriptionId <= 0 && len(req.PrescriptionDetail) > 0 {
+		newPrescriptionRequest := &pasturePb.PrescriptionRequest{
+			Name:                 fmt.Sprintf("%s-%s-%s", disease.Name, time.Now().Local().Format("20060102"), operationUser.Name),
+			ApplicableDiseaseIds: []int32{req.DiseaseId},
+			IsShow:               pasturePb.IsShow_Ok,
+		}
+		prescription = model.NewPrescription(
+			pastureId, newPrescriptionRequest, fmt.Sprintf("%d", disease.Id),
+			1, 0, 0, userModel.SystemUser,
+		)
+
+		if err = s.DB.Model(new(model.Prescription)).
+			Create(prescription).Error; err != nil {
+			zaplog.Error("CowDiseaseCreate", zap.Any("err", err), zap.Any("prescription", prescription))
+			return xerr.Customf("创建处方错误: %s", err.Error())
+		}
+
+		newPrescriptionDrugs := model.NewPrescriptionDrugs(pastureId, prescription.Id, req.PrescriptionDetail)
+		if err = s.DB.Model(new(model.PrescriptionDrugs)).
+			Create(newPrescriptionDrugs).Error; err != nil {
+			return xerr.WithStack(err)
+		}
+		prescriptionDetail = model.PrescriptionDrugsSlice(newPrescriptionDrugs).ToPB()
+	}
+
 	if err = s.DB.Transaction(func(tx *gorm.DB) error {
 		lastPrescriptionName := ""
-		// 已有的处方使用次数+1
-		if req.PrescriptionId > 0 {
-			prescription.EventUseCountUpdate()
+		// 1. 更新处方使用次数
+		if prescription.Id > 0 {
+			prescription.EventUseCountUpdate() // 处方使用次数+1
 			if err = tx.Model(new(model.Prescription)).
 				Select("use_count").
 				Where("id = ?", prescription.Id).
@@ -122,65 +204,43 @@ func (s *StoreEntry) CowDiseaseCreate(ctx context.Context, req *pasturePb.EventC
 				return xerr.WithStack(err)
 			}
 			lastPrescriptionName = prescription.Name
-		}
-		// 新的临时处方
-		if req.PrescriptionId <= 0 && len(req.PrescriptionDetail) > 0 {
-			newPrescriptionRequest := &pasturePb.PrescriptionRequest{
-				Name:                 fmt.Sprintf("%s-%s-%s", disease.Name, time.Now().Local().Format("20060102"), operationUser.Name),
-				ApplicableDiseaseIds: []int32{req.DiseaseId},
-				IsShow:               pasturePb.IsShow_Ok,
-			}
-			newPrescription := model.NewPrescription(
-				userModel.AppPasture.Id,
-				newPrescriptionRequest,
-				fmt.Sprintf("%d", disease.Id),
-				1,
-				0,
-				0,
-				userModel.SystemUser,
-			)
-			newPrescription.UseCount += 1
-			if err = tx.Model(new(model.Prescription)).Create(newPrescription).Error; err != nil {
-				return xerr.WithStack(err)
-			}
-			prescription = newPrescription
-			lastPrescriptionName = newPrescription.Name
-
-			newPrescriptionDrugs := model.NewPrescriptionDrugs(userModel.AppPasture.Id, prescription.Id, req.PrescriptionDetail)
-			if err = tx.Model(new(model.PrescriptionDrugs)).Create(newPrescriptionDrugs).Error; err != nil {
-				return xerr.WithStack(err)
-			}
-
 			// 记录事件日志
-			cowLogs := s.SubmitEventLog(ctx, userModel.AppPasture.Id, cow, pasturePb.EventType_Disease, newEventCowDisease)
+			cowLogs := s.SubmitEventLog(ctx, pastureId, cow, pasturePb.EventType_Disease, newEventCowDisease)
 			if err = tx.Table(cowLogs.TableName()).Create(cowLogs).Error; err != nil {
 				return xerr.WithStack(err)
 			}
 		}
-
-		// 创建 CowDisease
+		// 2. 创建牛只疾病信息
 		newEventCowDisease.LastPrescriptionName = lastPrescriptionName
-		if err = tx.Model(new(model.EventCowDisease)).Create(newEventCowDisease).Error; err != nil {
+		if err = tx.Model(new(model.EventCowDisease)).
+			Create(newEventCowDisease).Error; err != nil {
 			return xerr.WithStack(err)
 		}
-		// 创建治疗记录
-		if isCreatePrescription {
-			newCowTreatmentRequest = &pasturePb.CowTreatmentRequest{
+		// 3. 创建治疗记录
+		if len(prescriptionDetail) > 0 {
+			diseaseTypeMap := s.DiseaseTypeMap()
+			newCowTreatmentRequest := &pasturePb.CowTreatmentRequest{
 				CowId:              req.CowId,
 				PrescriptionId:     prescription.Id,
-				DiseaseId:          req.DiseaseId,
+				DiseaseId:          int32(disease.Id),
 				DiseaseName:        disease.Name,
 				DiseaseType:        disease.DiseaseType,
-				PrescriptionDetail: req.PrescriptionDetail,
+				PrescriptionDetail: prescriptionDetail,
 				TreatmentResult:    pasturePb.TreatmentResult_GoOn,
 				Remarks:            req.Remarks,
 				TreatmentAt:        req.DiseaseAt,
 			}
-			newEventCowTreatment = model.NewEventCowTreatment(userModel.AppPasture.Id, prescription, newCowTreatmentRequest, diseaseTypeMap, operationUser, userModel.SystemUser)
+			newEventCowTreatment := model.NewEventCowTreatment(pastureId, prescription, newCowTreatmentRequest, diseaseTypeMap, operationUser, userModel.SystemUser)
 			newEventCowTreatment.CowDiseaseId = newEventCowDisease.Id
+			if err = tx.Model(new(model.EventCowTreatment)).
+				Create(newEventCowTreatment).Error; err != nil {
+				return xerr.WithStack(err)
+			}
+		}
 
-			// 创建治疗记录
-			if err = tx.Model(new(model.EventCowTreatment)).Create(newEventCowTreatment).Error; err != nil {
+		// 4. 如果是脖环揭发
+		if req.ExposeDiseaseType == pasturePb.ExposeDiseaseType_Neck_Ring {
+			if err = s.NeckRingUpdateHealth(ctx, pastureId, cow.Id, operationUser); err != nil {
 				return xerr.WithStack(err)
 			}
 		}
@@ -191,65 +251,6 @@ func (s *StoreEntry) CowDiseaseCreate(ctx context.Context, req *pasturePb.EventC
 	return nil
 }
 
-// CowDiseaseList 发病牛只清单
-func (s *StoreEntry) CowDiseaseList(ctx context.Context, req *pasturePb.SearchEventCowTreatmentRequest, pagination *pasturePb.PaginationModel) (*pasturePb.EventCowDiseaseResponse, error) {
-	userModel, err := s.GetUserModel(ctx)
-	if err != nil {
-		return nil, xerr.WithStack(err)
-	}
-
-	cowDiseaseList := make([]*model.EventCowDisease, 0)
-	var count int64 = 0
-	pref := s.DB.Table(fmt.Sprintf("%s as a", new(model.EventCowDisease).TableName())).
-		Joins(fmt.Sprintf("JOIN %s AS b on a.cow_id = b.id", new(model.Cow).TableName())).
-		Select("a.*,b.pen_name").
-		Where("a.pasture_id = ?", userModel.AppPasture.Id).
-		Where("a.health_status != ?", pasturePb.HealthStatus_Curable)
-
-	if len(req.CowIds) > 0 {
-		pref.Where("a.cow_id IN ?", req.CowIds)
-	}
-
-	if req.EarNumber != "" {
-		pref.Where("a.ear_number = ?", req.EarNumber)
-	}
-
-	if req.DiseaseId > 0 {
-		pref.Where("a.disease_id = ?", req.DiseaseId)
-	}
-
-	if req.PenId > 0 {
-		pref.Where("b.pen_id = ?", req.PenId)
-	}
-
-	if req.HealthStatus > 0 {
-		pref.Where("a.health_status = ?", req.HealthStatus)
-	}
-
-	if req.DiseasedStartAt > 0 && req.DiseaseEndAt > 0 && req.DiseaseEndAt >= req.DiseasedStartAt {
-		pref.Where("a.disease_at BETWEEN ? AND ?", req.DiseasedStartAt, req.DiseaseEndAt)
-	}
-
-	if err = pref.Order("a.id DESC").
-		Count(&count).Limit(int(pagination.PageSize)).
-		Offset(int(pagination.PageOffset)).
-		Find(&cowDiseaseList).Error; err != nil {
-		return nil, xerr.WithStack(err)
-	}
-
-	healthStatusMap := s.HealthStatusMap()
-	return &pasturePb.EventCowDiseaseResponse{
-		Code: http.StatusOK,
-		Msg:  "ok",
-		Data: &pasturePb.EventCowDiseaseData{
-			List:     model.EventCowDiseaseSlice(cowDiseaseList).ToPB(healthStatusMap),
-			Total:    int32(count),
-			PageSize: pagination.PageSize,
-			Page:     pagination.Page,
-		},
-	}, nil
-}
-
 // CowDiseaseDiagnose 发病牛只诊断
 func (s *StoreEntry) CowDiseaseDiagnose(ctx context.Context, req *pasturePb.CowDiagnosedRequest) error {
 	userModel, err := s.GetUserModel(ctx)
@@ -447,192 +448,3 @@ func (s *StoreEntry) CowDiseaseTreatment(ctx context.Context, req *pasturePb.Cow
 
 	return nil
 }
-
-func (s *StoreEntry) DiseaseSuggestPrescription(ctx context.Context, diseaseId int64) (*pasturePb.ConfigOptionsListResponse, error) {
-	userModel, err := s.GetUserModel(ctx)
-	if err != nil {
-		return nil, xerr.WithStack(err)
-	}
-
-	res := make([]*pasturePb.ConfigOptionsList, 0)
-	prescriptionList := make([]*model.Prescription, 0)
-	if err = s.DB.Model(new(model.Prescription)).
-		Where("is_show = ?", pasturePb.IsShow_Ok).
-		Where("pasture_id = ?", userModel.AppPasture.Id).
-		Find(&prescriptionList).Error; err != nil {
-		return nil, xerr.WithStack(err)
-	}
-
-	for _, v := range prescriptionList {
-		disabled := false
-		if strings.Contains(v.ApplicableDisease, fmt.Sprintf("%d", diseaseId)) {
-			disabled = true
-		}
-		res = append(res, &pasturePb.ConfigOptionsList{
-			Value:    v.Id,
-			Label:    v.Name,
-			Disabled: disabled,
-		})
-	}
-
-	return &pasturePb.ConfigOptionsListResponse{
-		Code: http.StatusOK,
-		Msg:  "ok",
-		Data: res,
-	}, nil
-
-}
-
-// CowDiseaseTreatmentDetail 发病牛只治疗详情列表
-func (s *StoreEntry) CowDiseaseTreatmentDetail(ctx context.Context, req *pasturePb.EventCowTreatmentDetailRequest,
-	pagination *pasturePb.PaginationModel) (*pasturePb.EventCowTreatmentDetailResponse, error) {
-	userModel, err := s.GetUserModel(ctx)
-	if err != nil {
-		return nil, xerr.WithStack(err)
-	}
-
-	eventCowDisease := &model.EventCowDisease{}
-	var count int64 = 0
-	pref := s.DB.Model(new(model.EventCowDisease)).
-		Where("cow_id = ?", req.CowId).
-		Where("pasture_id = ?", userModel.AppPasture.Id).
-		Where("id = ?", req.Id)
-
-	if req.DiseaseId > 0 {
-		pref.Where("disease_id = ?", req.DiseaseId)
-	}
-
-	if req.DiseaseStartAt > 0 && req.DiseaseEndAt > 0 && req.DiseaseStartAt <= req.DiseaseEndAt {
-		pref.Where("disease_at BETWEEN ? AND ?", req.DiseaseStartAt, req.DiseaseEndAt)
-	}
-
-	if err = pref.Count(&count).
-		Limit(int(pagination.PageSize)).
-		Offset(int(pagination.PageOffset)).
-		Order("id desc").
-		First(&eventCowDisease).Error; err != nil {
-		if errors.Is(err, gorm.ErrRecordNotFound) {
-			return &pasturePb.EventCowTreatmentDetailResponse{
-				Code: http.StatusOK,
-				Msg:  "ok",
-				Data: &pasturePb.EventCowTreatmentDetail{
-					List:     make([]*pasturePb.EventCowTreatment, 0),
-					Total:    0,
-					PageSize: pagination.PageSize,
-					Page:     pagination.Page,
-				},
-			}, nil
-		} else {
-			return nil, xerr.WithStack(err)
-		}
-	}
-
-	eventCowTreatmentList := make([]*model.EventCowTreatment, 0)
-	if err = s.DB.Model(new(model.EventCowTreatment)).
-		Where("cow_disease_id = ?", req.Id).
-		Where("cow_id = ?", req.CowId).
-		Order("id desc").
-		Find(&eventCowTreatmentList).Error; err != nil {
-		return nil, xerr.WithStack(err)
-	}
-
-	return &pasturePb.EventCowTreatmentDetailResponse{
-		Code: http.StatusOK,
-		Msg:  "ok",
-		Data: &pasturePb.EventCowTreatmentDetail{
-			List:     model.EventCowTreatmentSlice(eventCowTreatmentList).ToPB(eventCowDisease),
-			Total:    int32(count),
-			PageSize: pagination.Page,
-			Page:     pagination.PageSize,
-		},
-	}, nil
-}
-
-func (s *StoreEntry) CowDiseaseCurable(ctx context.Context, req *pasturePb.EventCowCurableRequest) error {
-	userModel, err := s.GetUserModel(ctx)
-	if err != nil {
-		return xerr.WithStack(err)
-	}
-
-	eventCowDiseaseList := make([]*model.EventCowDisease, 0)
-	if err = s.DB.Where("id IN ?", req.Ids).
-		Where("health_status = ?", pasturePb.HealthStatus_Treatment).
-		Where("pasture_id = ?", userModel.AppPasture.Id).
-		Find(&eventCowDiseaseList).Error; err != nil {
-		zaplog.Error("GetEventCowDiseaseList", zap.Any("err", err), zap.Any("req", req))
-		return xerr.Custom("异常数据")
-	}
-
-	if len(eventCowDiseaseList) == 0 {
-		return nil
-	}
-
-	operationUser, err := s.GetSystemUserById(ctx, int64(req.OperationId))
-	if err != nil {
-		return xerr.Customf("该用户不存在: %d", req.OperationId)
-	}
-
-	eventCowTreatmentList := make([]*model.EventCowTreatment, 0)
-	for _, v := range eventCowDiseaseList {
-		newEventCowTreatment := model.NewEventCowCurableTreatment(userModel.AppPasture.Id, userModel.SystemUser, operationUser, v, req.Remarks, int64(req.CurableAt))
-		eventCowTreatmentList = append(eventCowTreatmentList, newEventCowTreatment)
-	}
-
-	if len(eventCowTreatmentList) <= 0 {
-		return nil
-	}
-
-	if err = s.DB.Transaction(func(tx *gorm.DB) error {
-		for _, eventCowDisease := range eventCowDiseaseList {
-			eventCowDisease.EventCurableUpdate(int64(req.CurableAt))
-			if err = tx.Model(eventCowDisease).
-				Select("health_status", "diagnosed_result", "curable_at").
-				Where("id = ?", eventCowDisease.Id).
-				Where("health_status = ?", pasturePb.HealthStatus_Treatment).
-				Updates(eventCowDisease).Error; err != nil {
-				return xerr.WithStack(err)
-			}
-
-			cow, err := s.GetCowInfoByCowId(ctx, userModel.AppPasture.Id, eventCowDisease.CowId)
-			if err != nil {
-				return xerr.WithStack(err)
-			}
-			// 更新牛只健康状态
-			cow.EventHealthStatusUpdate(pasturePb.HealthStatus_Curable)
-			if err = tx.Model(cow).
-				Select("health_status").
-				Where("id = ?", eventCowDisease.CowId).
-				Updates(cow).Error; err != nil {
-				return xerr.WithStack(err)
-			}
-
-			// 更新发病事件日志
-			cowLogs := &model.EventCowLog{CowId: cow.Id}
-			curableAtFormat := ""
-			if eventCowDisease.CurableAt > 0 {
-				curableAtFormat = time.Unix(eventCowDisease.CurableAt, 0).Local().Format(model.LayoutDate2)
-			}
-			curableAtParse := time.Unix(eventCowDisease.CurableAt, 0).Local()
-			diseaseAtParse := time.Unix(eventCowDisease.DiseaseAt, 0).Local()
-			curableDays := int64(curableAtParse.Sub(diseaseAtParse).Hours() / 24)
-
-			if err = tx.Table(cowLogs.TableName()).
-				Where("event_type = ?", pasturePb.EventType_Disease).
-				Where("event_at = ?", eventCowDisease.DiseaseAt).
-				Update("event_description", fmt.Sprintf("疾病名称: %s; 状态: 已治愈; 治愈时间: %s; 治疗天数: %d;", eventCowDisease.DiseaseName, curableAtFormat, curableDays)).
-				Error; err != nil {
-				return xerr.WithStack(err)
-			}
-		}
-
-		if err = tx.Model(new(model.EventCowTreatment)).Create(eventCowTreatmentList).Error; err != nil {
-			return xerr.WithStack(err)
-		}
-
-		return nil
-	}); err != nil {
-		return xerr.WithStack(err)
-	}
-
-	return nil
-}

+ 251 - 0
module/backend/event_health_more.go

@@ -0,0 +1,251 @@
+package backend
+
+import (
+	"context"
+	"errors"
+	"fmt"
+	"kpt-pasture/model"
+	"net/http"
+	"strings"
+	"time"
+
+	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
+	"gitee.com/xuyiping_admin/pkg/logger/zaplog"
+	"gitee.com/xuyiping_admin/pkg/xerr"
+	"go.uber.org/zap"
+	"gorm.io/gorm"
+)
+
+// CowDiseaseTreatmentDetail 发病牛只治疗详情列表
+func (s *StoreEntry) CowDiseaseTreatmentDetail(ctx context.Context, req *pasturePb.EventCowTreatmentDetailRequest,
+	pagination *pasturePb.PaginationModel) (*pasturePb.EventCowTreatmentDetailResponse, error) {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	eventCowDisease := &model.EventCowDisease{}
+	var count int64 = 0
+	pref := s.DB.Model(new(model.EventCowDisease)).
+		Where("cow_id = ?", req.CowId).
+		Where("pasture_id = ?", userModel.AppPasture.Id).
+		Where("id = ?", req.Id)
+
+	if req.DiseaseId > 0 {
+		pref.Where("disease_id = ?", req.DiseaseId)
+	}
+
+	if req.DiseaseStartAt > 0 && req.DiseaseEndAt > 0 && req.DiseaseStartAt <= req.DiseaseEndAt {
+		pref.Where("disease_at BETWEEN ? AND ?", req.DiseaseStartAt, req.DiseaseEndAt)
+	}
+
+	if err = pref.Count(&count).
+		Limit(int(pagination.PageSize)).
+		Offset(int(pagination.PageOffset)).
+		Order("id desc").
+		First(&eventCowDisease).Error; err != nil {
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return &pasturePb.EventCowTreatmentDetailResponse{
+				Code: http.StatusOK,
+				Msg:  "ok",
+				Data: &pasturePb.EventCowTreatmentDetail{
+					List:     make([]*pasturePb.EventCowTreatment, 0),
+					Total:    0,
+					PageSize: pagination.PageSize,
+					Page:     pagination.Page,
+				},
+			}, nil
+		} else {
+			return nil, xerr.WithStack(err)
+		}
+	}
+
+	eventCowTreatmentList := make([]*model.EventCowTreatment, 0)
+	if err = s.DB.Model(new(model.EventCowTreatment)).
+		Where("cow_disease_id = ?", req.Id).
+		Where("cow_id = ?", req.CowId).
+		Order("id desc").
+		Find(&eventCowTreatmentList).Error; err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	return &pasturePb.EventCowTreatmentDetailResponse{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: &pasturePb.EventCowTreatmentDetail{
+			List:     model.EventCowTreatmentSlice(eventCowTreatmentList).ToPB(eventCowDisease),
+			Total:    int32(count),
+			PageSize: pagination.Page,
+			Page:     pagination.PageSize,
+		},
+	}, nil
+}
+
+func (s *StoreEntry) DiseaseSuggestPrescription(ctx context.Context, diseaseId int64) (*pasturePb.ConfigOptionsListResponse, error) {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	res := make([]*pasturePb.ConfigOptionsList, 0)
+	prescriptionList := make([]*model.Prescription, 0)
+	if err = s.DB.Model(new(model.Prescription)).
+		Where("is_show = ?", pasturePb.IsShow_Ok).
+		Where("pasture_id = ?", userModel.AppPasture.Id).
+		Find(&prescriptionList).Error; err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	for _, v := range prescriptionList {
+		disabled := false
+		if strings.Contains(v.ApplicableDisease, fmt.Sprintf("%d", diseaseId)) {
+			disabled = true
+		}
+		res = append(res, &pasturePb.ConfigOptionsList{
+			Value:    v.Id,
+			Label:    v.Name,
+			Disabled: disabled,
+		})
+	}
+
+	return &pasturePb.ConfigOptionsListResponse{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: res,
+	}, nil
+
+}
+
+func (s *StoreEntry) CowDiseaseCurable(ctx context.Context, req *pasturePb.EventCowCurableRequest) error {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return xerr.WithStack(err)
+	}
+
+	eventCowDiseaseList := make([]*model.EventCowDisease, 0)
+	if err = s.DB.Where("id IN ?", req.Ids).
+		Where("health_status = ?", pasturePb.HealthStatus_Treatment).
+		Where("pasture_id = ?", userModel.AppPasture.Id).
+		Find(&eventCowDiseaseList).Error; err != nil {
+		zaplog.Error("GetEventCowDiseaseList", zap.Any("err", err), zap.Any("req", req))
+		return xerr.Custom("异常数据")
+	}
+
+	if len(eventCowDiseaseList) == 0 {
+		return nil
+	}
+
+	operationUser, err := s.GetSystemUserById(ctx, int64(req.OperationId))
+	if err != nil {
+		return xerr.Customf("该用户不存在: %d", req.OperationId)
+	}
+
+	eventCowTreatmentList := make([]*model.EventCowTreatment, 0)
+	for _, v := range eventCowDiseaseList {
+		newEventCowTreatment := model.NewEventCowCurableTreatment(userModel.AppPasture.Id, userModel.SystemUser, operationUser, v, req.Remarks, int64(req.CurableAt))
+		eventCowTreatmentList = append(eventCowTreatmentList, newEventCowTreatment)
+	}
+
+	if len(eventCowTreatmentList) <= 0 {
+		return nil
+	}
+
+	if err = s.DB.Transaction(func(tx *gorm.DB) error {
+		for _, eventCowDisease := range eventCowDiseaseList {
+			eventCowDisease.EventCurableUpdate(int64(req.CurableAt))
+			if err = tx.Model(eventCowDisease).
+				Select("health_status", "diagnosed_result", "curable_at").
+				Where("id = ?", eventCowDisease.Id).
+				Where("health_status = ?", pasturePb.HealthStatus_Treatment).
+				Updates(eventCowDisease).Error; err != nil {
+				return xerr.WithStack(err)
+			}
+
+			cow, err := s.GetCowInfoByCowId(ctx, userModel.AppPasture.Id, eventCowDisease.CowId)
+			if err != nil {
+				return xerr.WithStack(err)
+			}
+			// 更新牛只健康状态
+			cow.EventHealthStatusUpdate(pasturePb.HealthStatus_Curable)
+			if err = tx.Model(cow).
+				Select("health_status").
+				Where("id = ?", eventCowDisease.CowId).
+				Updates(cow).Error; err != nil {
+				return xerr.WithStack(err)
+			}
+
+			// 更新发病事件日志
+			cowLogs := &model.EventCowLog{CowId: cow.Id}
+			curableAtFormat := ""
+			if eventCowDisease.CurableAt > 0 {
+				curableAtFormat = time.Unix(eventCowDisease.CurableAt, 0).Local().Format(model.LayoutDate2)
+			}
+			curableAtParse := time.Unix(eventCowDisease.CurableAt, 0).Local()
+			diseaseAtParse := time.Unix(eventCowDisease.DiseaseAt, 0).Local()
+			curableDays := int64(curableAtParse.Sub(diseaseAtParse).Hours() / 24)
+
+			if err = tx.Table(cowLogs.TableName()).
+				Where("event_type = ?", pasturePb.EventType_Disease).
+				Where("event_at = ?", eventCowDisease.DiseaseAt).
+				Update("event_description", fmt.Sprintf("疾病名称: %s; 状态: 已治愈; 治愈时间: %s; 治疗天数: %d;", eventCowDisease.DiseaseName, curableAtFormat, curableDays)).
+				Error; err != nil {
+				return xerr.WithStack(err)
+			}
+		}
+
+		if err = tx.Model(new(model.EventCowTreatment)).Create(eventCowTreatmentList).Error; err != nil {
+			return xerr.WithStack(err)
+		}
+
+		return nil
+	}); err != nil {
+		return xerr.WithStack(err)
+	}
+
+	return nil
+}
+
+// NeckRingUpdateHealth 更新牛只脖环揭发疾病信息
+func (s *StoreEntry) NeckRingUpdateHealth(ctx context.Context, pastureId, cowId int64, operationUser *model.SystemUser) error {
+	neckRingHealthWarning := &model.NeckRingHealthWarning{}
+	if err := s.DB.Model(new(model.NeckRingHealthWarning)).
+		Where("pasture_id = ?", pastureId).
+		Where("is_show = ?", pasturePb.IsShow_Ok).
+		Where("cow_id = ?", cowId).
+		First(neckRingHealthWarning).Error; err != nil {
+		return xerr.WithStack(err)
+	}
+
+	neckRingHealth := &model.NeckRingHealth{}
+	if err := s.DB.Model(new(model.NeckRingHealth)).
+		Where("pasture_id = ?", pastureId).
+		Where("is_show = ?", pasturePb.IsShow_Ok).
+		Where("id = ?", neckRingHealthWarning.NeckRingHealthId).
+		First(neckRingHealth).Error; err != nil {
+		return xerr.WithStack(err)
+	}
+
+	if err := s.DB.Transaction(func(tx *gorm.DB) error {
+		neckRingHealthWarning.EventDiseaseUpdate()
+		if err := tx.Model(neckRingHealthWarning).
+			Select("is_show", pasturePb.IsShow_Ok).
+			Where("id = ?", neckRingHealthWarning.Id).
+			Updates(neckRingHealthWarning).Error; err != nil {
+			return xerr.WithStack(err)
+		}
+
+		neckRingHealth.EventDiseaseUpdate(operationUser)
+		if err := tx.Model(neckRingHealth).
+			Select("is_show", "check_user_id", "check_user_name", "check_result", "check_at").
+			Where("id = ?", neckRingHealth.Id).
+			Updates(neckRingHealth).Error; err != nil {
+			return xerr.WithStack(err)
+		}
+
+		return nil
+	}); err != nil {
+		return xerr.WithStack(err)
+	}
+
+	return nil
+}

+ 2 - 0
module/backend/interface.go

@@ -345,6 +345,8 @@ type WarningService interface {
 	NeckRingWarningHealthCowList(ctx context.Context, req *pasturePb.HealthWarningRequest, pagination *pasturePb.PaginationModel) (*pasturePb.HealthWarningResponse, error)
 	NeckRingNoEstrusBatch(ctx context.Context, req *pasturePb.NeckRingNoEstrusBatchRequest) error
 	NeckRingNoDiseaseBatch(ctx context.Context, req *pasturePb.NeckRingNoEstrusBatchRequest) error
+	DataNoticeDetail(ctx context.Context) *model.DataNoticeResponse
+	DataNoticeKnown(ctx context.Context, dataNoticeId int64) error
 }
 
 type MilkHallService interface {

+ 53 - 0
module/backend/neck_ring_warning.go

@@ -332,3 +332,56 @@ func (s *StoreEntry) AbortionWarningQuery(ctx context.Context, pastureId int64)
 		Where("a.pasture_id = ?", pastureId).
 		Where("a.is_show = ?", pasturePb.IsShow_Ok), nil
 }
+
+func (s *StoreEntry) DataNoticeDetail(ctx context.Context) *model.DataNoticeResponse {
+	res := &model.DataNoticeResponse{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: make([]*model.NoticeContent, 0),
+	}
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return res
+	}
+	pastureId := userModel.AppPasture.Id
+	nowTime := time.Now().Local().Format(model.LayoutDate2)
+	noticeList := make([]*model.DataNotice, 0)
+	if err = s.DB.Model(new(model.DataNotice)).
+		Where("pasture_id = ?", pastureId).
+		Where("is_show = ?", pasturePb.IsShow_Ok).
+		Where("start_date >= ? AND end_date <= ?", nowTime, nowTime).
+		Find(&noticeList).Error; err != nil {
+		return res
+	}
+	res.Data = model.DataNoticeSlice(noticeList).ToPB(userModel.SystemUser.Id)
+	return res
+}
+
+func (s *StoreEntry) DataNoticeKnown(ctx context.Context, dataNoticeId int64) error {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return xerr.WithStack(err)
+	}
+	pastureId := userModel.AppPasture.Id
+	dataNotice := model.DataNotice{}
+	if err = s.DB.Model(new(model.DataNotice)).
+		Where("id = ? and pasture_id = ?", dataNoticeId, pastureId).
+		First(&dataNotice).Error; err != nil {
+		return xerr.WithStack(err)
+	}
+
+	newKnownUsers := ""
+	if len(dataNotice.KnownUsers) > 0 {
+		newKnownUsers = fmt.Sprintf("%s,%d", dataNotice.KnownUsers, userModel.SystemUser.Id)
+	} else {
+		newKnownUsers = fmt.Sprintf("%d", userModel.SystemUser.Id)
+	}
+
+	if err = s.DB.Model(new(model.DataNotice)).
+		Where("id = ?", dataNotice.Id).
+		Select("known_users").
+		Update("known_users", newKnownUsers).Error; err != nil {
+		return xerr.WithStack(err)
+	}
+	return nil
+}

+ 2 - 3
module/crontab/neck_ring_calculate.go

@@ -375,13 +375,13 @@ func (e *Entry) UpdateFilterCorrect(pastureId int64, processIds []int64) {
 // UpdateChangeAdJust 更新群体校正数据
 func (e *Entry) UpdateChangeAdJust(pastureId int64, xToday *XToday) {
 	res := make([]*model.NeckRingBarChange, 0)
-	oneDayAgo := time.Now().Local().AddDate(0, 0, -1).Format(model.LayoutDate2)
+	yesterday := time.Now().Local().AddDate(0, 0, -1).Format(model.LayoutDate2)
 	if err := e.DB.Table(fmt.Sprintf("%s as h", new(model.NeckActiveHabit).TableName())).
 		Select(`h.neck_ring_number,h.heat_date, h.frameid, c.pen_id, c.pen_name, COUNT(*) as nb,
 		ROUND(AVG(h.change_high)) as change_high, ROUND(AVG(h.change_filter)) as change_filter`).
 		Joins("JOIN cow as c ON h.cow_id = c.id").
 		Where("h.pasture_id = ?", pastureId).
-		Where("h.heat_date >= ?", oneDayAgo).
+		Where("h.heat_date >= ?", yesterday).
 		Where("h.cow_id > ?", 0).
 		Where("c.pen_id > ?", 0).
 		Group("h.heat_date, h.frameid, c.pen_id").
@@ -398,7 +398,6 @@ func (e *Entry) UpdateChangeAdJust(pastureId int64, xToday *XToday) {
 			Where("pasture_id = ?", pastureId).
 			Where("neck_ring_number = ?", v.NeckRingNumber).
 			Where("heat_date = ?", v.HeatDate).
-			//Where("pen_id = ?", v.PenId).
 			Where("frameid = ?", v.FrameId).
 			Update("change_adjust", v.ChangeFilter).Error; err != nil {
 			zaplog.Error("UpdateChangeAdJust-1", zap.Any("error", err), zap.Any("xToday", xToday))

+ 2 - 1
module/crontab/neck_ring_health.go

@@ -91,7 +91,8 @@ func (e *Entry) updateNeckRingHealth(pastureId int64, healthWarningList []*model
 		}
 	}
 	zaplog.Info("HealthWarning", zap.Any("healthWarningList", healthWarningList))
-	if err := e.DB.Model(new(model.NeckRingHealth)).Create(&healthWarningList).Error; err != nil {
+	if err := e.DB.Model(new(model.NeckRingHealth)).
+		Create(&healthWarningList).Error; err != nil {
 		zaplog.Error("HealthWarning", zap.Any("error", err), zap.Any("healthWarningList", healthWarningList))
 	}
 }

+ 10 - 0
util/util_more.go

@@ -168,3 +168,13 @@ func DeduplicateInt64(slice []int64) []int64 {
 
 	return result
 }
+
+// InArray 检查指定的int64值是否存在于int64切片中
+func InArray(val int64, array []int64) bool {
+	for _, item := range array {
+		if item == val {
+			return true
+		}
+	}
+	return false
+}