浏览代码

pasture: 牧场管理-繁殖状态模块

Yi 1 年之前
父节点
当前提交
47b4319e6e

+ 1 - 1
go.mod

@@ -3,7 +3,7 @@ module kpt-pasture
 go 1.17
 
 require (
-	gitee.com/xuyiping_admin/go_proto v0.0.0-20240428015639-7a6e0cd54b97
+	gitee.com/xuyiping_admin/go_proto v0.0.0-20240428053026-cef7ffa85f63
 	gitee.com/xuyiping_admin/pkg v0.0.0-20231218082641-aac597b8a015
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible
 	github.com/getsentry/sentry-go v0.23.0

+ 2 - 0
go.sum

@@ -64,6 +64,8 @@ gitee.com/xuyiping_admin/go_proto v0.0.0-20240426071708-b9b3ad7038bd h1:t/CNbQqj
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240426071708-b9b3ad7038bd/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240428015639-7a6e0cd54b97 h1:J7A5DbtzqOJ77FlRXMDsHfWYQtFpllNIfSMsKaSPKHs=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240428015639-7a6e0cd54b97/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240428053026-cef7ffa85f63 h1:IwGT4Tfgj67D+7M+vYluYug8nSQ9Gl505cJvxDBl9Fo=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240428053026-cef7ffa85f63/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
 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=

+ 48 - 0
http/handler/pasture/barn.go

@@ -111,3 +111,51 @@ func CreatedOrUpdateBarnType(c *gin.Context) {
 		Data: &operationPb.Success{Success: true},
 	})
 }
+
+func SearchBreedStatusList(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.Dependency(c).StoreEventHub.OpsService.SearchBreedStatusList(c, &req, pagination)
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, res)
+}
+
+// CreatedOrUpdateBreedStatus 添加或者更新繁殖状态
+func CreatedOrUpdateBreedStatus(c *gin.Context) {
+	var req pasturePb.SearchBaseConfigList
+	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),
+	); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if err := middleware.BackendOperation(c).OpsService.CreateOrUpdateBreedStatus(c, &req); err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+
+	ginutil.JSONResp(c, &operationPb.CommonOK{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: &operationPb.Success{Success: true},
+	})
+}

+ 2 - 0
http/route/pasture_api.go

@@ -17,5 +17,7 @@ func PastureManageAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		pastureRoute.POST("/barn/createOrUpdate", pasture.CreatedOrUpdateBarn)
 		pastureRoute.POST("/barn/type/list", pasture.SearchBarnTypeList)
 		pastureRoute.POST("/barn/type/createOrUpdate", pasture.CreatedOrUpdateBarnType)
+		pastureRoute.POST("/breed/status/list", pasture.SearchBreedStatusList)
+		pastureRoute.POST("/breed/status/createOrUpdate", pasture.CreatedOrUpdateBreedStatus)
 	}
 }

+ 17 - 0
migrator/v0001_barn.sql

@@ -0,0 +1,17 @@
+CREATE TABLE `barn` (
+    `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键Id自增',
+    `name` varchar(255) NOT NULL DEFAULT '' COMMENT '名称',
+    `remarks` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
+    `barn_type` tinyint(1) unsigned NOT NULL COMMENT '栏舍类型',
+    `lengths` smallint(5) unsigned NOT NULL COMMENT '栏舍长度',
+    `widths` smallint(5) unsigned NOT NULL COMMENT '栏舍宽度',
+    `doctrinal_capacity` smallint(5) unsigned NOT NULL COMMENT '理论存栏数',
+    `actual_capacity` smallint(5) unsigned NOT NULL COMMENT '实际存栏数',
+    `bed_number` smallint(5) unsigned NOT NULL COMMENT '床位数',
+    `neck_number` smallint(5) unsigned NOT NULL COMMENT '颈颊数',
+    `is_show` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否启用 1 启用 2 关闭',
+    `is_delete` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否删除 1 未删除 2 已删除',
+    `created_at` bigint(20) unsigned NOT NULL COMMENT '创建时间',
+    `updated_at` bigint(20) unsigned NOT NULL COMMENT '更新时间',
+    PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='栏舍表'

+ 9 - 0
migrator/v0001_config_barn_type.sql

@@ -0,0 +1,9 @@
+CREATE TABLE `config_barn_type` (
+    `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
+    `name` varchar(255) NOT NULL DEFAULT '' COMMENT '栏舍名称',
+    `remarks` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
+    `is_show` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否开启 1 开启 2 关闭',
+    `created_at` bigint(20) unsigned NOT NULL COMMENT '创建时间',
+    `updated_at` bigint(20) unsigned NOT NULL COMMENT '更新时间',
+    PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='栏舍类型表'

+ 9 - 0
migrator/v0001_config_breed_status.sql

@@ -0,0 +1,9 @@
+CREATE TABLE `config_breed_status` (
+   `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键Id自增',
+   `name` varchar(255) NOT NULL DEFAULT '' COMMENT '名称',
+   `remarks` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
+   `is_show` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否启用 1 启用 2 关闭',
+   `created_at` bigint(20) unsigned NOT NULL COMMENT '创建时间',
+   `updated_at` bigint(20) unsigned NOT NULL COMMENT '更新时间',
+   PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='繁殖状态表'

+ 9 - 0
migrator/v0001_config_cow_kind.sql

@@ -0,0 +1,9 @@
+CREATE TABLE `config_cow_kind` (
+   `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
+   `name` varchar(255) NOT NULL DEFAULT '' COMMENT '名称',
+   `remarks` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
+   `is_show` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否开启 1 开启 2 关闭',
+   `created_at` bigint(20) unsigned NOT NULL COMMENT '创建时间',
+   `updated_at` bigint(20) unsigned NOT NULL COMMENT '更新时间',
+   PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='牛只种类表'

+ 9 - 0
migrator/v0001_config_cow_source.sql

@@ -0,0 +1,9 @@
+CREATE TABLE `config_cow_source` (
+     `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',
+     `name` varchar(255) NOT NULL DEFAULT '' COMMENT '名称',
+     `remarks` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
+     `is_show` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否开启 1 开启 2 关闭',
+     `created_at` bigint(20) unsigned NOT NULL COMMENT '创建时间',
+     `updated_at` bigint(20) unsigned NOT NULL COMMENT '更新时间',
+     PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='牛只来源表'

+ 1 - 1
model/barn.go

@@ -39,7 +39,7 @@ func (b BarnSlice) ToPB(configBarnTypes []*ConfigBarnType) []*pasturePb.SearchBa
 		}
 
 		res[i] = &pasturePb.SearchBarnList{
-			Id:                v.Id,
+			Id:                int32(v.Id),
 			Name:              v.Name,
 			IsShow:            v.IsShow,
 			Remarks:           v.Remarks,

+ 1 - 1
model/config_barn_type.go

@@ -35,7 +35,7 @@ func (c ConfigBarnTypeSlice) ToPB2() []*pasturePb.SearchBaseConfigList {
 	res := make([]*pasturePb.SearchBaseConfigList, len(c))
 	for i, d := range c {
 		res[i] = &pasturePb.SearchBaseConfigList{
-			Id:        d.Id,
+			Id:        int32(d.Id),
 			Name:      d.Name,
 			Remarks:   d.Remarks,
 			IsShow:    d.IsShow,

+ 47 - 0
model/config_breed_status.go

@@ -0,0 +1,47 @@
+package model
+
+import (
+	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
+)
+
+type ConfigBreedStatus struct {
+	Id        int64                 `json:"id"`
+	Name      string                `json:"name"`
+	Remarks   string                `json:"remarks"`
+	IsShow    pasturePb.IsShow_Kind `json:"is_show"`
+	CreatedAt int64                 `json:"created_at"`
+	UpdatedAt int64                 `json:"updated_at"`
+}
+
+func (c *ConfigBreedStatus) TableName() string {
+	return "config_breed_status"
+}
+
+type ConfigBreedStatusSlice []*ConfigBreedStatus
+
+func (c ConfigBreedStatusSlice) ToPB() []*pasturePb.BarnTypeList {
+	res := make([]*pasturePb.BarnTypeList, len(c))
+	for i, d := range c {
+		res[i] = &pasturePb.BarnTypeList{
+			Value:    int32(d.Id),
+			Label:    d.Name,
+			Disabled: true,
+		}
+	}
+	return res
+}
+
+func (c ConfigBreedStatusSlice) ToPB2() []*pasturePb.SearchBaseConfigList {
+	res := make([]*pasturePb.SearchBaseConfigList, len(c))
+	for i, d := range c {
+		res[i] = &pasturePb.SearchBaseConfigList{
+			Id:        int32(d.Id),
+			Name:      d.Name,
+			Remarks:   d.Remarks,
+			IsShow:    d.IsShow,
+			CreatedAt: int32(d.CreatedAt),
+			UpdatedAt: int32(d.UpdatedAt),
+		}
+	}
+	return res
+}

+ 3 - 0
module/backend/interface.go

@@ -90,6 +90,9 @@ type PastureManageService interface {
 	CreateOrUpdateBarn(ctx context.Context, req *pasturePb.SearchBarnList) error
 	SearchBarnTypeList(ctx context.Context, req *pasturePb.SearchNameRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchBaseConfigResponse, error)
 	CreateOrUpdateBarnType(ctx context.Context, req *pasturePb.SearchBaseConfigList) error
+
+	SearchBreedStatusList(ctx context.Context, req *pasturePb.SearchNameRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchBaseConfigResponse, error)
+	CreateOrUpdateBreedStatus(ctx context.Context, req *pasturePb.SearchBaseConfigList) error
 }
 
 //go:generate mockgen -destination mock/ConfigDataService.go -package kptservicemock kpt-pasture/module/backend ConfigDataService

+ 50 - 2
module/backend/pasture_manage.go

@@ -46,7 +46,7 @@ func (s *StoreEntry) SearchBarnList(ctx context.Context, req *pasturePb.SearchNa
 
 func (s *StoreEntry) CreateOrUpdateBarn(ctx context.Context, req *pasturePb.SearchBarnList) error {
 	if req.Id > 0 {
-		barn := &model.Bran{Id: req.Id}
+		barn := &model.Bran{Id: int64(req.Id)}
 		if err := s.DB.Model(&model.Bran{}).First(barn).Error; err != nil {
 			if !errors.Is(err, gorm.ErrRecordNotFound) {
 				return xerr.WithStack(err)
@@ -101,7 +101,7 @@ func (s *StoreEntry) SearchBarnTypeList(ctx context.Context, req *pasturePb.Sear
 
 func (s *StoreEntry) CreateOrUpdateBarnType(ctx context.Context, req *pasturePb.SearchBaseConfigList) error {
 	if req.Id > 0 {
-		barn := &model.ConfigBarnType{Id: req.Id}
+		barn := &model.ConfigBarnType{Id: int64(req.Id)}
 		if err := s.DB.Model(&model.ConfigBarnType{}).First(barn).Error; err != nil {
 			if !errors.Is(err, gorm.ErrRecordNotFound) {
 				return xerr.WithStack(err)
@@ -120,3 +120,51 @@ func (s *StoreEntry) CreateOrUpdateBarnType(ctx context.Context, req *pasturePb.
 	}
 	return nil
 }
+
+func (s *StoreEntry) SearchBreedStatusList(ctx context.Context, req *pasturePb.SearchNameRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchBaseConfigResponse, error) {
+	breedStatusList := make([]*model.ConfigBreedStatus, 0)
+	var count int64 = 0
+
+	pref := s.DB.Model(new(model.ConfigBreedStatus))
+	if req.Name != "" {
+		pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
+	}
+
+	if err := pref.Order("id desc").Count(&count).Limit(int(pagination.PageSize)).Offset(int(pagination.PageOffset)).
+		Find(&breedStatusList).Debug().Error; err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	return &pasturePb.SearchBaseConfigResponse{
+		Code:    http.StatusOK,
+		Message: "ok",
+		Data: &pasturePb.SearchBaseConfigData{
+			List:     model.ConfigBreedStatusSlice(breedStatusList).ToPB2(),
+			Total:    int32(count),
+			PageSize: pagination.PageSize,
+			Page:     pagination.Page,
+		},
+	}, nil
+}
+
+func (s *StoreEntry) CreateOrUpdateBreedStatus(ctx context.Context, req *pasturePb.SearchBaseConfigList) error {
+	if req.Id > 0 {
+		barn := &model.ConfigBreedStatus{Id: int64(req.Id)}
+		if err := s.DB.Model(&model.ConfigBreedStatus{}).First(barn).Error; err != nil {
+			if !errors.Is(err, gorm.ErrRecordNotFound) {
+				return xerr.WithStack(err)
+			}
+		}
+	}
+
+	if err := s.DB.Model(&model.ConfigBreedStatus{}).Where(map[string]interface{}{
+		"id": req.Id,
+	}).Assign(map[string]interface{}{
+		"name":    req.Name,
+		"remarks": req.Remarks,
+		"is_show": pasturePb.IsShow_Ok,
+	}).FirstOrCreate(&model.ConfigBreedStatus{}).Error; err != nil {
+		return xerr.WithStack(err)
+	}
+	return nil
+}