Browse Source

event: immunization 免疫事件批量处理

Yi 2 months ago
parent
commit
5ac83fb83a

+ 1 - 1
go.mod

@@ -3,7 +3,7 @@ module kpt-pasture
 go 1.17
 
 require (
-	gitee.com/xuyiping_admin/go_proto v0.0.0-20250224085851-f9b6573afee1
+	gitee.com/xuyiping_admin/go_proto v0.0.0-20250224101733-fe1933dd5c95
 	gitee.com/xuyiping_admin/pkg v0.0.0-20241108060137-caea58c59f5b
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible
 	github.com/eclipse/paho.mqtt.golang v1.4.3

+ 4 - 0
go.sum

@@ -238,6 +238,10 @@ gitee.com/xuyiping_admin/go_proto v0.0.0-20250224084846-f92b34bad24c h1:SfrHXto4
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250224084846-f92b34bad24c/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250224085851-f9b6573afee1 h1:sG6KjT6KTR7l8MzkCGzq5WhR8ggaR5G98yRhYLSdIcI=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250224085851-f9b6573afee1/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250224100909-32e2afe20cd1 h1:shMT9JudB6zrONYM+ORVIODDW+JCvSLIMVuYRvER39A=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250224100909-32e2afe20cd1/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250224101733-fe1933dd5c95 h1:rFUrO43EQWO8sCPkN0CEvxjpG3Zz2AiAin+ihdDlw7s=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250224101733-fe1933dd5c95/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/pkg v0.0.0-20241108060137-caea58c59f5b h1:w05MxH7yqveRlaRbxHhbif5YjPrJFodRPfOjYhXn7Zk=
 gitee.com/xuyiping_admin/pkg v0.0.0-20241108060137-caea58c59f5b/go.mod h1:8tF25X6pE9WkFCczlNAC0K2mrjwKvhhp02I7o0HtDxY=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=

+ 40 - 0
http/handler/event/event_health.go

@@ -198,3 +198,43 @@ func CowDiseaseCurable(c *gin.Context) {
 		Data: &operationPb.Success{Success: true},
 	})
 }
+
+func ImmunizationList(c *gin.Context) {
+	var req pasturePb.SearchEventImmunizationRequest
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	pagination := &pasturePb.PaginationModel{
+		Page:       int32(c.GetInt(middleware.Page)),
+		PageSize:   int32(c.GetInt(middleware.PageSize)),
+		PageOffset: int32(c.GetInt(middleware.PageOffset)),
+	}
+
+	res, err := middleware.Dependency(c).StoreEventHub.OpsService.ImmunizationList(c, &req, pagination)
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, res)
+}
+
+func ImmunizationBatch(c *gin.Context) {
+	var req pasturePb.ImmunizationItem
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if err := middleware.Dependency(c).StoreEventHub.OpsService.ImmunizationBatch(c, &req); err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+
+	ginutil.JSONResp(c, &operationPb.CommonOK{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: &operationPb.Success{Success: true},
+	})
+}

+ 169 - 1
http/handler/pasture/prescription.go → http/handler/pasture/pasture.go

@@ -5,6 +5,8 @@ import (
 	"net/http"
 	"strconv"
 
+	"gitee.com/xuyiping_admin/pkg/xerr"
+
 	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
 	operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
 	"gitee.com/xuyiping_admin/pkg/apierr"
@@ -174,7 +176,7 @@ func PrescriptionDetail(c *gin.Context) {
 }
 
 func SearchImmunizationList(c *gin.Context) {
-	var req pasturePb.ImmunizationRequest
+	var req pasturePb.SearchEventImmunizationRequest
 	if err := ginutil.BindProto(c, &req); err != nil {
 		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
 		return
@@ -240,3 +242,169 @@ func ImmunizationIsShow(c *gin.Context) {
 		Data: &operationPb.Success{Success: true},
 	})
 }
+
+// SameTimeCreatedOrUpdate 同期策略添加或者更新
+func SameTimeCreatedOrUpdate(c *gin.Context) {
+	var req pasturePb.SearchSameTimeList
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+	if err := valid.ValidateStruct(&req,
+		valid.Field(&req.Name, valid.Required),
+		valid.Field(&req.CowType, valid.Required),
+		valid.Field(&req.WeekType, valid.Required),
+		valid.Field(&req.PostpartumDaysStart, valid.Required),
+		valid.Field(&req.PostpartumDaysEnd, valid.Required),
+		valid.Field(&req.CollateNodes, valid.Required),
+	); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if req.PostpartumDaysStart > req.PostpartumDaysEnd {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, xerr.New("开始天数不能大于结束天数"))
+		return
+	}
+
+	if len(req.CollateNodes) < 0 {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, xerr.New("错误的同期策略数据"))
+		return
+	}
+
+	if err := middleware.BackendOperation(c).OpsService.CreateOrUpdateSameTime(c, &req); err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+
+	ginutil.JSONResp(c, &operationPb.CommonOK{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: &operationPb.Success{Success: true},
+	})
+}
+
+// SameTimeList 同步策略列表
+func SameTimeList(c *gin.Context) {
+	var req pasturePb.SearchNameRequest
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	pagination := &pasturePb.PaginationModel{
+		Page:       int32(c.GetInt(middleware.Page)),
+		PageSize:   int32(c.GetInt(middleware.PageSize)),
+		PageOffset: int32(c.GetInt(middleware.PageOffset)),
+	}
+
+	res, err := middleware.BackendOperation(c).OpsService.SearchSameTimeList(c, &req, pagination)
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, res)
+}
+
+func SameTimeIsShow(c *gin.Context) {
+	sameTimeIdStr := c.Param("id")
+	sameTimeId, _ := strconv.Atoi(sameTimeIdStr)
+
+	if err := valid.Validate(sameTimeId, valid.Required, valid.Min(1)); err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	if err := middleware.BackendOperation(c).OpsService.SameTimeIsShow(c, int64(sameTimeId)); err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, &operationPb.CommonOK{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: &operationPb.Success{Success: true},
+	})
+}
+
+func SystemBasicList(c *gin.Context) {
+	res, err := middleware.BackendOperation(c).OpsService.SystemBasicList(c)
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, res)
+}
+
+func SystemBasicEdit(c *gin.Context) {
+	var req pasturePb.BaseDataConfigBatch
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if err := valid.ValidateStruct(&req,
+		valid.Field(&req.Item, valid.Required, valid.Each(valid.By(func(value interface{}) error {
+			s := value.(pasturePb.BaseDataConfig)
+			return valid.ValidateStruct(&s,
+				valid.Field(&s.Id, valid.Required),
+				valid.Field(&s.Name, valid.Required),
+			)
+		}))),
+	); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	err := middleware.BackendOperation(c).OpsService.SystemBasicEdit(c, &req)
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, &operationPb.CommonOK{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: &operationPb.Success{Success: true},
+	})
+}
+
+func SaleDealerCreateOrUpdate(c *gin.Context) {
+	var req pasturePb.DealerItem
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if err := valid.ValidateStruct(&req,
+		valid.Field(&req.Name, valid.Required),
+		valid.Field(&req.Phone, valid.Required),
+		valid.Field(&req.Contacts, valid.Required),
+	); err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+
+	if err := middleware.BackendOperation(c).OpsService.CreateOrUpdateDealer(c, &req); err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+
+	ginutil.JSONResp(c, &operationPb.CommonOK{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: &operationPb.Success{Success: true},
+	})
+}
+
+func SaleDealerList(c *gin.Context) {
+	var req pasturePb.SearchNameRequest
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	res, err := middleware.BackendOperation(c).OpsService.SearchDealerList(c, &req)
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, res)
+}

+ 0 - 182
http/handler/pasture/seme_time.go

@@ -1,182 +0,0 @@
-package pasture
-
-import (
-	"kpt-pasture/http/middleware"
-	"net/http"
-	"strconv"
-
-	"gitee.com/xuyiping_admin/pkg/xerr"
-
-	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
-	operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
-	"gitee.com/xuyiping_admin/pkg/apierr"
-	"gitee.com/xuyiping_admin/pkg/ginutil"
-	"gitee.com/xuyiping_admin/pkg/valid"
-	"github.com/gin-gonic/gin"
-)
-
-// SameTimeCreatedOrUpdate 同期策略添加或者更新
-func SameTimeCreatedOrUpdate(c *gin.Context) {
-	var req pasturePb.SearchSameTimeList
-	if err := ginutil.BindProto(c, &req); err != nil {
-		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
-		return
-	}
-	if err := valid.ValidateStruct(&req,
-		valid.Field(&req.Name, valid.Required),
-		valid.Field(&req.CowType, valid.Required),
-		valid.Field(&req.WeekType, valid.Required),
-		valid.Field(&req.PostpartumDaysStart, valid.Required),
-		valid.Field(&req.PostpartumDaysEnd, valid.Required),
-		valid.Field(&req.CollateNodes, valid.Required),
-	); err != nil {
-		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
-		return
-	}
-
-	if req.PostpartumDaysStart > req.PostpartumDaysEnd {
-		apierr.AbortBadRequest(c, http.StatusBadRequest, xerr.New("开始天数不能大于结束天数"))
-		return
-	}
-
-	if len(req.CollateNodes) < 0 {
-		apierr.AbortBadRequest(c, http.StatusBadRequest, xerr.New("错误的同期策略数据"))
-		return
-	}
-
-	if err := middleware.BackendOperation(c).OpsService.CreateOrUpdateSameTime(c, &req); err != nil {
-		apierr.ClassifiedAbort(c, err)
-		return
-	}
-
-	ginutil.JSONResp(c, &operationPb.CommonOK{
-		Code: http.StatusOK,
-		Msg:  "ok",
-		Data: &operationPb.Success{Success: true},
-	})
-}
-
-// SameTimeList 同步策略列表
-func SameTimeList(c *gin.Context) {
-	var req pasturePb.SearchNameRequest
-	if err := ginutil.BindProto(c, &req); err != nil {
-		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
-		return
-	}
-
-	pagination := &pasturePb.PaginationModel{
-		Page:       int32(c.GetInt(middleware.Page)),
-		PageSize:   int32(c.GetInt(middleware.PageSize)),
-		PageOffset: int32(c.GetInt(middleware.PageOffset)),
-	}
-
-	res, err := middleware.BackendOperation(c).OpsService.SearchSameTimeList(c, &req, pagination)
-	if err != nil {
-		apierr.ClassifiedAbort(c, err)
-		return
-	}
-	ginutil.JSONResp(c, res)
-}
-
-func SameTimeIsShow(c *gin.Context) {
-	sameTimeIdStr := c.Param("id")
-	sameTimeId, _ := strconv.Atoi(sameTimeIdStr)
-
-	if err := valid.Validate(sameTimeId, valid.Required, valid.Min(1)); err != nil {
-		apierr.ClassifiedAbort(c, err)
-		return
-	}
-	if err := middleware.BackendOperation(c).OpsService.SameTimeIsShow(c, int64(sameTimeId)); err != nil {
-		apierr.ClassifiedAbort(c, err)
-		return
-	}
-	ginutil.JSONResp(c, &operationPb.CommonOK{
-		Code: http.StatusOK,
-		Msg:  "ok",
-		Data: &operationPb.Success{Success: true},
-	})
-}
-
-func SystemBasicList(c *gin.Context) {
-	res, err := middleware.BackendOperation(c).OpsService.SystemBasicList(c)
-	if err != nil {
-		apierr.ClassifiedAbort(c, err)
-		return
-	}
-	ginutil.JSONResp(c, res)
-}
-
-func SystemBasicEdit(c *gin.Context) {
-	var req pasturePb.BaseDataConfigBatch
-	if err := ginutil.BindProto(c, &req); err != nil {
-		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
-		return
-	}
-
-	if err := valid.ValidateStruct(&req,
-		valid.Field(&req.Item, valid.Required, valid.Each(valid.By(func(value interface{}) error {
-			s := value.(pasturePb.BaseDataConfig)
-			return valid.ValidateStruct(&s,
-				valid.Field(&s.Id, valid.Required),
-				valid.Field(&s.Name, valid.Required),
-			)
-		}))),
-	); err != nil {
-		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
-		return
-	}
-
-	err := middleware.BackendOperation(c).OpsService.SystemBasicEdit(c, &req)
-	if err != nil {
-		apierr.ClassifiedAbort(c, err)
-		return
-	}
-	ginutil.JSONResp(c, &operationPb.CommonOK{
-		Code: http.StatusOK,
-		Msg:  "ok",
-		Data: &operationPb.Success{Success: true},
-	})
-}
-
-func SaleDealerCreateOrUpdate(c *gin.Context) {
-	var req pasturePb.DealerItem
-	if err := ginutil.BindProto(c, &req); err != nil {
-		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
-		return
-	}
-
-	if err := valid.ValidateStruct(&req,
-		valid.Field(&req.Name, valid.Required),
-		valid.Field(&req.Phone, valid.Required),
-		valid.Field(&req.Contacts, valid.Required),
-	); err != nil {
-		apierr.ClassifiedAbort(c, err)
-		return
-	}
-
-	if err := middleware.BackendOperation(c).OpsService.CreateOrUpdateDealer(c, &req); err != nil {
-		apierr.ClassifiedAbort(c, err)
-		return
-	}
-
-	ginutil.JSONResp(c, &operationPb.CommonOK{
-		Code: http.StatusOK,
-		Msg:  "ok",
-		Data: &operationPb.Success{Success: true},
-	})
-}
-
-func SaleDealerList(c *gin.Context) {
-	var req pasturePb.SearchNameRequest
-	if err := ginutil.BindProto(c, &req); err != nil {
-		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
-		return
-	}
-
-	res, err := middleware.BackendOperation(c).OpsService.SearchDealerList(c, &req)
-	if err != nil {
-		apierr.ClassifiedAbort(c, err)
-		return
-	}
-	ginutil.JSONResp(c, res)
-}

+ 3 - 3
http/route/event_api.go

@@ -19,15 +19,12 @@ func EventAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		// 转群
 		eventRoute.POST("/group/transfer/list", event.GroupTransferEventList)
 		eventRoute.POST("/group/transfer/create", event.GroupTransferEventCreate)
-
 		// 体况评分
 		eventRoute.POST("/body/score/list", event.BodyScoreEventList)
 		eventRoute.POST("/body/score/create", event.BodyScoreEventCreate)
-
 		// 称重
 		eventRoute.POST("/weight/list", event.WeightList)
 		eventRoute.POST("/weight/batch", event.WeightBatch)
-
 		// 产犊
 		eventRoute.POST("/calving/list", event.CalvingEventList)
 		eventRoute.POST("/calving/create", event.CalvingEventCreate)
@@ -67,5 +64,8 @@ func EventAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		// 牛只销售
 		eventRoute.POST("/sale/create", event.CowSale)
 		eventRoute.POST("/sale/list", event.CowSaleList)
+		// 免疫
+		eventRoute.POST("/immunization/batch", event.ImmunizationBatch)
+		eventRoute.POST("/immunization/list", event.ImmunizationList)
 	}
 }

+ 12 - 0
module/backend/event_base_more.go

@@ -245,3 +245,15 @@ func (s *StoreEntry) CowSaleList(ctx context.Context, req *pasturePb.EventCowSal
 		},
 	}, err
 }
+
+func (s *StoreEntry) ImmunizationList(ctx context.Context, req *pasturePb.SearchEventImmunizationRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchEventImmunizationResponse, error) {
+	return &pasturePb.SearchEventImmunizationResponse{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: nil,
+	}, nil
+}
+
+func (s *StoreEntry) ImmunizationBatch(ctx context.Context, req *pasturePb.ImmunizationItem) error {
+	return nil
+}

+ 1 - 0
module/backend/event_breed_more.go

@@ -450,6 +450,7 @@ func (s *StoreEntry) WeaningBatch(ctx context.Context, req *pasturePb.EventWeani
 	if err != nil {
 		return xerr.WithStack(err)
 	}
+	req.OperationName = operation.Name
 
 	if err = s.DB.Transaction(func(tx *gorm.DB) error {
 		cowInfo := &model.Cow{}

+ 6 - 1
module/backend/interface.go

@@ -127,7 +127,7 @@ type PastureManageService interface {
 	CreateOrUpdatePrescription(ctx context.Context, req *pasturePb.PrescriptionRequest) error
 	PrescriptionDetail(ctx context.Context, id int64) (*pasturePb.PrescriptionDetailResponse, error)
 
-	ImmunizationList(ctx context.Context, req *pasturePb.ImmunizationRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchImmunizationResponse, error)
+	ImmunizationSetList(ctx context.Context, req *pasturePb.ImmunizationRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchImmunizationResponse, error)
 	CreatedOrUpdateImmunization(ctx context.Context, req *pasturePb.ImmunizationRequest) error
 	ImmunizationIsShow(ctx context.Context, id int64) error
 
@@ -211,8 +211,13 @@ type EventService interface {
 	// SubmitEventLog 记录提交事件结果日志
 	SubmitEventLog(ctx context.Context, pastureId int64, cow *model.Cow, eventType pasturePb.EventType_Kind, exposeEstrusType pasturePb.ExposeEstrusType_Kind, req interface{}) *model.EventCowLog
 
+	// CowSaleCreate 销售
 	CowSaleCreate(ctx context.Context, req *pasturePb.EventCowSale) error
 	CowSaleList(ctx context.Context, req *pasturePb.EventCowSaleRequest, pagination *pasturePb.PaginationModel) (*pasturePb.EventCowSaleResponse, error)
+
+	// ImmunizationBatch 免疫事件相关
+	ImmunizationBatch(ctx context.Context, req *pasturePb.ImmunizationItem) error
+	ImmunizationList(ctx context.Context, req *pasturePb.SearchEventImmunizationRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchEventImmunizationResponse, error)
 }
 
 //go:generate mockgen -destination mock/CowService.go -package kptservicemock kpt-pasture/module/backend CowService

+ 1 - 1
module/backend/prescription.go

@@ -419,7 +419,7 @@ func (s *StoreEntry) PrescriptionDetail(ctx context.Context, id int64) (*pasture
 	}, nil
 }
 
-func (s *StoreEntry) ImmunizationList(ctx context.Context, req *pasturePb.ImmunizationRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchImmunizationResponse, error) {
+func (s *StoreEntry) ImmunizationSetList(ctx context.Context, req *pasturePb.ImmunizationRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchImmunizationResponse, error) {
 	userModel, err := s.GetUserModel(ctx)
 	if err != nil {
 		return nil, xerr.WithStack(err)