浏览代码

eventCowTreatment: 批量治愈

Yi 5 月之前
父节点
当前提交
f7e0ac7b3f
共有 7 个文件被更改,包括 99 次插入1 次删除
  1. 1 1
      go.mod
  2. 4 0
      go.sum
  3. 28 0
      http/handler/event/event_health.go
  4. 1 0
      http/route/event_api.go
  5. 1 0
      model/event_cow_disease.go
  6. 63 0
      module/backend/event_health.go
  7. 1 0
      module/backend/interface.go

+ 1 - 1
go.mod

@@ -3,7 +3,7 @@ module kpt-pasture
 go 1.17
 
 require (
-	gitee.com/xuyiping_admin/go_proto v0.0.0-20241023085318-8fa74469f8b9
+	gitee.com/xuyiping_admin/go_proto v0.0.0-20241024082136-e206f3f7ead0
 	gitee.com/xuyiping_admin/pkg v0.0.0-20241010101255-0c6bd229b939
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible
 	github.com/eko/gocache v1.1.0

+ 4 - 0
go.sum

@@ -112,6 +112,10 @@ gitee.com/xuyiping_admin/go_proto v0.0.0-20241023073355-19a0c4c38a5a h1:7GFvstT8
 gitee.com/xuyiping_admin/go_proto v0.0.0-20241023073355-19a0c4c38a5a/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20241023085318-8fa74469f8b9 h1:WRlynGQz0czTgLBRNUcxFa/h6ahvxn6XibXW/P19TQs=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20241023085318-8fa74469f8b9/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20241024075542-0db2fc7bfe0f h1:HinhCcyYTbNJ091e+1zZY1PxGNjPdKGO5P9vlymIfOE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20241024075542-0db2fc7bfe0f/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20241024082136-e206f3f7ead0 h1:ewJf5F8O3uHKKQX4lXy1KL/P9BCIbqRG7pjzyH5Rr9s=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20241024082136-e206f3f7ead0/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=
 gitee.com/xuyiping_admin/pkg v0.0.0-20241008063555-121a776fd331 h1:qJcpJ3o+O7uxDqR0I9LijQmi607IKvhf4mGum/ZUPT0=

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

@@ -151,3 +151,31 @@ func CowDiseaseTreatmentDetail(c *gin.Context) {
 
 	ginutil.JSONResp(c, res)
 }
+
+func CowDiseaseCurable(c *gin.Context) {
+	var req pasturePb.EventCowCurableRequest
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if err := valid.ValidateStruct(&req,
+		valid.Field(&req.Ids, valid.Required),
+		valid.Field(&req.OperationId, valid.Required),
+		valid.Field(&req.CurableAt, valid.Required),
+	); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if err := middleware.BackendOperation(c).OpsService.CowDiseaseCurable(c, &req); err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+
+	ginutil.JSONResp(c, &operationPb.CommonOK{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: &operationPb.Success{Success: true},
+	})
+}

+ 1 - 0
http/route/event_api.go

@@ -55,5 +55,6 @@ func EventAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		eventRoute.POST("/disease/diagnose", event.CowDiseaseDiagnose)
 		eventRoute.POST("/disease/treatment", event.CowDiseaseTreatment)
 		eventRoute.POST("/disease/treatment/details", event.CowDiseaseTreatmentDetail)
+		eventRoute.POST("/disease/curable", event.CowDiseaseCurable)
 	}
 }

+ 1 - 0
model/event_cow_disease.go

@@ -21,6 +21,7 @@ type EventCowDisease struct {
 	OperationName         string                      `json:"operationName"`
 	DiagnoseOperationId   int32                       `json:"diagnoseOperationId"`
 	DiagnoseOperationName string                      `json:"diagnoseOperationName"`
+	CurableAt             int64                       `json:"curableAt"`
 	CreatedAt             int64                       `json:"createdAt"`
 	UpdatedAt             int64                       `json:"updatedAt"`
 }

+ 63 - 0
module/backend/event_health.go

@@ -319,6 +319,7 @@ func (s *StoreEntry) CowDiseaseTreatment(ctx context.Context, req *pasturePb.Cow
 	return nil
 }
 
+// CowDiseaseTreatmentDetail 发病牛只治疗详情列表
 func (s *StoreEntry) CowDiseaseTreatmentDetail(ctx context.Context, req *pasturePb.EventCowTreatmentDetailRequest, pagination *pasturePb.PaginationModel) (*pasturePb.EventCowTreatmentDetailResponse, error) {
 	eventCowDiseaseList := make([]*model.EventCowDisease, 0)
 	var count int64 = 0
@@ -365,3 +366,65 @@ func (s *StoreEntry) CowDiseaseTreatmentDetail(ctx context.Context, req *pasture
 		},
 	}, nil
 }
+
+func (s *StoreEntry) CowDiseaseCurable(ctx context.Context, req *pasturePb.EventCowCurableRequest) error {
+	eventCowDiseaseList := make([]*model.EventCowDisease, 0)
+	if err := s.DB.Where("id IN ?", req.Ids).
+		Where("health_status = ?", pasturePb.HealthStatus_Treatment).
+		Find(&eventCowDiseaseList).Error; err != nil {
+		return xerr.WithStack(err)
+	}
+
+	if len(eventCowDiseaseList) == 0 {
+		return nil
+	}
+	if len(eventCowDiseaseList) != len(req.Ids) {
+		return xerr.New("id 参数错误")
+	}
+	operationUser, err := s.GetSystemUserById(ctx, int64(req.OperationId))
+	if err != nil {
+		return xerr.WithStack(err)
+	}
+	eventCowTreatmentList := make([]*model.EventCowTreatment, 0)
+	for _, v := range eventCowDiseaseList {
+		eventCowTreatmentList = append(eventCowTreatmentList, &model.EventCowTreatment{
+			CowId:              v.CowId,
+			CowDiseaseId:       v.Id,
+			DiseaseId:          int64(v.DiseaseId),
+			DiseaseName:        v.DiseaseName,
+			PrescriptionId:     0,
+			PrescriptionName:   "",
+			PrescriptionDetail: "",
+			TreatmentResult:    pasturePb.TreatmentResult_Curable,
+			OperationId:        operationUser.Id,
+			OperationName:      operationUser.Name,
+			Remarks:            req.Remarks,
+			TreatmentAt:        int64(req.CurableAt),
+		})
+	}
+
+	if err = s.DB.Transaction(func(tx *gorm.DB) error {
+		if err = tx.Model(model.EventCowDisease{}).Where("id IN ?", req.Ids).
+			Where("health_status = ?", pasturePb.HealthStatus_Treatment).Updates(map[string]interface{}{
+			"health_status":    pasturePb.HealthStatus_Curable,
+			"diagnosed_result": pasturePb.IsShow_Ok,
+			"curable_at":       req.CurableAt,
+		}).Error; err != nil {
+			return xerr.WithStack(err)
+		}
+		if err = tx.Model(model.Cow{}).Where("id IN ?", req.Ids).Updates(map[string]interface{}{
+			"health_status": pasturePb.HealthStatus_Curable,
+		}).Error; err != nil {
+			return xerr.WithStack(err)
+		}
+
+		if err = tx.Model(model.EventCowTreatment{}).Create(eventCowTreatmentList).Error; err != nil {
+			return xerr.WithStack(err)
+		}
+		return nil
+	}); err != nil {
+		return xerr.WithStack(err)
+	}
+
+	return nil
+}

+ 1 - 0
module/backend/interface.go

@@ -189,6 +189,7 @@ type EventService interface {
 	CowDiseaseDiagnose(ctx context.Context, req *pasturePb.CowDiagnosedRequest) error
 	CowDiseaseTreatment(ctx context.Context, req *pasturePb.CowTreatmentRequest) error
 	CowDiseaseTreatmentDetail(ctx context.Context, req *pasturePb.EventCowTreatmentDetailRequest, pagination *pasturePb.PaginationModel) (*pasturePb.EventCowTreatmentDetailResponse, error)
+	CowDiseaseCurable(ctx context.Context, req *pasturePb.EventCowCurableRequest) error
 }
 
 //go:generate mockgen -destination mock/CowService.go -package kptservicemock kpt-pasture/module/backend CowService