소스 검색

even:解决冲突

ping 10 달 전
부모
커밋
8093dc11b4
10개의 변경된 파일275개의 추가작업 그리고 59개의 파일을 삭제
  1. 1 1
      go.mod
  2. 10 0
      go.sum
  3. 1 1
      http/handler/config/config.go
  4. 55 0
      http/handler/event/event.go
  5. 3 0
      http/route/event_api.go
  6. 12 10
      model/event_transfer_group.go
  7. 96 1
      module/backend/event.go
  8. 3 0
      module/backend/interface.go
  9. 94 0
      module/backend/sql.go
  10. 0 46
      module/backend/system_service.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-20240506090538-9d6beda359cb
+	gitee.com/xuyiping_admin/go_proto v0.0.0-20240508080006-64977b5c321d
 	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

+ 10 - 0
go.sum

@@ -40,6 +40,16 @@ gitee.com/xuyiping_admin/go_proto v0.0.0-20240506084300-6d0267e74122 h1:vqc20q4R
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240506084300-6d0267e74122/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240506090538-9d6beda359cb h1:XZr1IuVNq6q9/KaoN/RiYHuy66BtJJ8cbOpeH8YXV2E=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20240506090538-9d6beda359cb/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240508060326-e5f376dcfe85 h1:nuD30H9Y2R8oSteyeOLSs+PjMhKMM+CdEMuoS5liFC8=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240508060326-e5f376dcfe85/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240508062143-1087f5b5588f h1:NTSDl7nwFGWfZVuqSpH40IlLfkfboTTHvNhxhZ4ztfc=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240508062143-1087f5b5588f/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240508064026-1bdb0320dc5f h1:O5d+gv6uqCmSTsSPAX0EStWP1QdXTEVxQCXhphxJ0ik=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240508064026-1bdb0320dc5f/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240508070519-7040a3cce5cb h1:9pcF+F4SY9WwnyHW1MRcegJQ3Q63Z5D8idE1KVq/1Bc=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240508070519-7040a3cce5cb/go.mod h1:x47UOU+lOkZnrtAENAsOGd7mZ5I8D2JRkMKMqLLRlVw=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240508080006-64977b5c321d h1:4mvRqpIybdhodr8Idd/brpBl65U7EXBWPhFstH3nM2I=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20240508080006-64977b5c321d/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=

+ 1 - 1
http/handler/config/config.go

@@ -84,7 +84,7 @@ func CowTransferPenReasonOptions(c *gin.Context) {
 }
 
 func SystemUserOptions(c *gin.Context) {
-	depIdStr := c.Param("dep_id")
+	depIdStr := c.Query("dept_id")
 	depId, _ := strconv.Atoi(depIdStr)
 	if err := valid.Validate(depId, valid.Required, valid.Min(-1)); err != nil {
 		apierr.ClassifiedAbort(c, err)

+ 55 - 0
http/handler/event/event.go

@@ -66,3 +66,58 @@ func EnterEventCreate(c *gin.Context) {
 		Data: &operationPb.Success{Success: true},
 	})
 }
+
+func GroupTransferEventList(c *gin.Context) {
+	var req pasturePb.SearchEventRequest
+	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.GroupTransferList(c, &req, pagination)
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, res)
+}
+
+func GroupTransferEventCreate(c *gin.Context) {
+	var req pasturePb.TransferGroupEventRequest
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if err := valid.ValidateStruct(&req,
+		valid.Field(&req.Body, valid.Required, valid.Each(valid.By(func(value interface{}) error {
+			s := value.(pasturePb.TransferGroupEventData)
+			return valid.ValidateStruct(&s,
+				valid.Field(&s.CowId, valid.Required),
+				valid.Field(&s.TransferDate, valid.Required),
+				valid.Field(&s.TransferInPenId, valid.Required),
+				valid.Field(&s.TransferReasonId, valid.Required),
+				valid.Field(&s.StaffMemberId, valid.Required),
+			)
+		}))),
+	); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if err := middleware.BackendOperation(c).OpsService.CreateGroupTransfer(c, &req); err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, &operationPb.CommonOK{
+		Code: http.StatusOK,
+		Msg:  "ok",
+		Data: &operationPb.Success{Success: true},
+	})
+}

+ 3 - 0
http/route/event_api.go

@@ -15,5 +15,8 @@ func EventAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		eventRoute := authRouteGroup(s, "/api/v1/event/")
 		eventRoute.POST("/enter/list", event.EnterEventList)
 		eventRoute.POST("/enter/create", event.EnterEventCreate)
+
+		eventRoute.POST("/group/transfer/list", event.GroupTransferEventList)
+		eventRoute.POST("/group/transfer/create", event.GroupTransferEventCreate)
 	}
 }

+ 12 - 10
model/event_transfer_group.go

@@ -1,16 +1,18 @@
 package model
 
 type EventTransferGroup struct {
-	Id               int64 `json:"id"`
-	CowId            int64 `json:"cow_id"`
-	TransferInPenId  int64 `json:"transfer_in_pen_id"`
-	TransferOutPenId int64 `json:"transfer_out_pen_id"`
-	TransferAt       int64 `json:"transfer_at"`
-	TransferReasonId int64 `json:"transfer_reason_id"`
-	StaffMemberId    int64 `json:"staff_member_id"`
-	OperationId      int64 `json:"operation_id"`
-	CreatedAt        int64 `json:"created_at"`
-	UpdatedAt        int64 `json:"updated_at"`
+	Id               int64  `json:"id"`
+	CowId            int64  `json:"cow_id"`
+	TransferInPenId  int64  `json:"transfer_in_pen_id"`
+	TransferOutPenId int64  `json:"transfer_out_pen_id"`
+	Lact             int32  `json:"lact"`
+	TransferDate     string `json:"transfer_date"`
+	TransferReasonId int64  `json:"transfer_reason_id"`
+	Remarks          string `json:"remarks"`
+	StaffMemberId    int64  `json:"staff_member_id"`
+	OperationId      int64  `json:"operation_id"`
+	CreatedAt        int64  `json:"created_at"`
+	UpdatedAt        int64  `json:"updated_at"`
 }
 
 func (e *EventTransferGroup) TableName() string {

+ 96 - 1
module/backend/event.go

@@ -67,6 +67,101 @@ func (s *StoreEntry) CreateEnter(ctx context.Context, req *pasturePb.SearchEnter
 	return nil
 }
 
-func (s *StoreEntry) TransferGroup(ctx context.Context) {
+func (s *StoreEntry) GroupTransferList(ctx context.Context, req *pasturePb.SearchEventRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchTransferGroupEventResponse, error) {
+	eventGroupTransferList := make([]*pasturePb.SearchTransferGroupData, 0)
+	var count int64 = 0
+	pref := s.DB.Table(fmt.Sprintf("%s as a", new(model.EventTransferGroup).TableName())).
+		Select(`a.id,a.cow_id,a.transfer_in_pen_id,a.transfer_out_pen_id,a.lact,a.remarks,a.transfer_reason_id,
+			a.transfer_date,a.created_at,a.staff_member_id,b.name as transfer_in_pen_name,c.name as transfer_out_pen_name,
+			d.name as transfer_reason_name,e.name as staff_member_name,f.lact,f.ear_number`).
+		Joins(fmt.Sprintf("JOIN %s AS b ON a.transfer_in_pen_id = b.id", new(model.Pen).TableName())).
+		Joins(fmt.Sprintf("JOIN %s AS c on a.transfer_out_pen_id = c.id", new(model.Pen).TableName())).
+		Joins(fmt.Sprintf("JOIN %s AS d on a.transfer_reason_id = d.id", new(model.ConfigTransferPenReason).TableName())).
+		Joins(fmt.Sprintf("JOIN %s AS e ON a.staff_member_id = e.id", new(model.SystemUser).TableName())).
+		Joins(fmt.Sprintf("JOIN %s AS f ON a.cow_id = b.id", new(model.Cow).TableName()))
+	if req.CowId > 0 {
+		pref.Where("a.cow_id = ?", req.CowId)
+	}
+
+	if err := pref.Order("a.id desc").Group("a.id").
+		Count(&count).Limit(int(pagination.PageSize)).
+		Offset(int(pagination.PageOffset)).
+		Find(&eventGroupTransferList).Error; err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	return &pasturePb.SearchTransferGroupEventResponse{
+		Code:    http.StatusOK,
+		Message: "ok",
+		Data: &pasturePb.SearchTransferGroupEventData{
+			List:     eventGroupTransferList,
+			Total:    int32(count),
+			PageSize: pagination.PageSize,
+			Page:     pagination.Page,
+		},
+	}, nil
+}
+
+func (s *StoreEntry) CreateGroupTransfer(ctx context.Context, req *pasturePb.TransferGroupEventRequest) error {
+	system, _ := s.GetCurrentSystemUser(ctx)
+	res := make([]*model.EventTransferGroup, 0)
+	for _, v := range req.Body {
+		cow, err := s.GetCowInfo(ctx, int64(v.CowId))
+		if err != nil {
+			return xerr.WithStack(err)
+		}
+		// 转去栏舍和当前栏舍相同,则不处理
+		if cow.PenId == int64(v.TransferInPenId) {
+			continue
+		}
+		pen, err := s.GetPenInfo(ctx, int64(v.TransferInPenId))
+		if err != nil {
+			return xerr.WithStack(err)
+		}
+
+		transferReasonData, err := s.GetTransferReasonInfo(ctx, int64(v.TransferReasonId))
+		if err != nil {
+			return xerr.WithStack(err)
+		}
+
+		staffMemberData, err := s.GetSystemUserInfo(ctx, int64(v.StaffMemberId))
+		if err != nil {
+			return xerr.WithStack(err)
+		}
+
+		res = append(res, &model.EventTransferGroup{
+			CowId:            int64(v.CowId),
+			TransferInPenId:  int64(v.TransferInPenId),
+			TransferOutPenId: pen.Id,
+			Lact:             cow.Lact,
+			TransferDate:     v.TransferDate,
+			TransferReasonId: transferReasonData.Id,
+			Remarks:          v.Remarks,
+			StaffMemberId:    staffMemberData.Id,
+			OperationId:      system.Id,
+		})
+	}
+	if len(res) <= 0 {
+		return nil
+	}
 
+	if err := s.DB.Transaction(func(tx *gorm.DB) error {
+		if err := tx.Create(res).Error; err != nil {
+			return xerr.WithStack(err)
+		}
+		for _, v := range res {
+			cow, err := s.GetCowInfo(ctx, v.CowId)
+			if err != nil {
+				return xerr.WithStack(err)
+			}
+			if err = s.DB.Model(cow).Update("pen_id", v.TransferInPenId).Error; err != nil {
+				return xerr.WithStack(err)
+			}
+		}
+		return nil
+	}); err != nil {
+		return xerr.WithStack(err)
+	}
+
+	return nil
 }

+ 3 - 0
module/backend/interface.go

@@ -122,4 +122,7 @@ type ConfigDataService interface {
 type EventService interface {
 	EnterList(ctx context.Context, req *pasturePb.SearchEventRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchEnterEventResponse, error)
 	CreateEnter(ctx context.Context, req *pasturePb.SearchEnterData) error
+
+	GroupTransferList(ctx context.Context, req *pasturePb.SearchEventRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchTransferGroupEventResponse, error)
+	CreateGroupTransfer(ctx context.Context, req *pasturePb.TransferGroupEventRequest) error
 }

+ 94 - 0
module/backend/sql.go

@@ -0,0 +1,94 @@
+package backend
+
+import (
+	"context"
+	"errors"
+	"kpt-pasture/model"
+
+	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
+	"gitee.com/xuyiping_admin/pkg/xerr"
+	"gorm.io/gorm"
+)
+
+// GetCurrentUserName 获取当前用户名
+func (s *StoreEntry) GetCurrentUserName(ctx context.Context) (string, error) {
+	userNameInter := ctx.Value(CurrentUserName)
+	if userNameInter == nil {
+		return "", xerr.Customf("cannot userName")
+	}
+
+	if userName, ok := userNameInter.(string); ok {
+		return userName, nil
+	} else {
+		return "", xerr.Customf("waring userName")
+	}
+}
+
+func (s *StoreEntry) GetCurrentSystemUser(ctx context.Context) (*model.SystemUser, error) {
+	// 解析token
+	userName, err := s.GetCurrentUserName(ctx)
+	if err != nil {
+		return nil, xerr.WithStack(err)
+	}
+	// 根据用户token获取用户数据
+	systemUser := &model.SystemUser{Name: userName}
+	if err = s.DB.Where("name = ?", userName).
+		Where("is_show = ? and is_delete = ?", pasturePb.IsShow_Ok, pasturePb.IsShow_Ok).
+		First(systemUser).Error; err != nil {
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return nil, xerr.Custom("该用户数据不存在")
+		}
+		return nil, xerr.WithStack(err)
+	}
+	return systemUser, nil
+}
+
+func (s *StoreEntry) GetSystemUserInfo(ctx context.Context, userId int64) (*model.SystemUser, error) {
+	systemUser := &model.SystemUser{
+		Id: userId,
+	}
+	if err := s.DB.First(systemUser).Error; err != nil {
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return nil, xerr.Custom("该数据不存在")
+		}
+		return nil, xerr.WithStack(err)
+	}
+	return systemUser, nil
+}
+
+func (s *StoreEntry) GetPenInfo(ctx context.Context, penId int64) (*model.Pen, error) {
+	penData := &model.Pen{
+		Id: penId,
+	}
+	if err := s.DB.First(penData).Error; err != nil {
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return nil, xerr.Custom("该数据不存在")
+		}
+		return nil, xerr.WithStack(err)
+	}
+	return penData, nil
+}
+
+func (s *StoreEntry) GetCowInfo(ctx context.Context, cowId int64) (*model.Cow, error) {
+	cowData := &model.Cow{Id: cowId}
+	if err := s.DB.First(cowData).Error; err != nil {
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return nil, xerr.Custom("该数据不存在")
+		}
+		return nil, xerr.WithStack(err)
+	}
+	return cowData, nil
+}
+
+func (s *StoreEntry) GetTransferReasonInfo(ctx context.Context, reasonId int64) (*model.ConfigTransferPenReason, error) {
+	configTransferPenReasonData := &model.ConfigTransferPenReason{
+		Id: reasonId,
+	}
+	if err := s.DB.First(configTransferPenReasonData).Error; err != nil {
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return nil, xerr.Custom("该数据不存在")
+		}
+		return nil, xerr.WithStack(err)
+	}
+	return configTransferPenReasonData, nil
+}

+ 0 - 46
module/backend/system_service.go

@@ -69,19 +69,6 @@ func (s *StoreEntry) Login(ctx context.Context, req *pasturePb.SearchUserRequest
 	}, nil
 }
 
-func (s *StoreEntry) GetSystemUserInfo(ctx context.Context, userId int64) (*model.SystemUser, error) {
-	systemUser := &model.SystemUser{
-		Id: userId,
-	}
-	if err := s.DB.First(systemUser).Error; err != nil {
-		if errors.Is(err, gorm.ErrRecordNotFound) {
-			return nil, xerr.Custom("该用户不存在")
-		}
-		return nil, xerr.WithStack(err)
-	}
-	return systemUser, nil
-}
-
 // SearchSystemUserList 查询系统用户
 func (s *StoreEntry) SearchSystemUserList(ctx context.Context, req *pasturePb.SearchUserRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchUserResponse, error) {
 	systemUserList := make([]*model.SystemUser, 0)
@@ -264,39 +251,6 @@ func (s *StoreEntry) SystemUserRoleSave(ctx context.Context, req *pasturePb.Syst
 	return nil
 }
 
-// GetCurrentUserName 获取当前用户名
-func (s *StoreEntry) GetCurrentUserName(ctx context.Context) (string, error) {
-	userNameInter := ctx.Value(CurrentUserName)
-	if userNameInter == nil {
-		return "", xerr.Customf("cannot userName")
-	}
-
-	if userName, ok := userNameInter.(string); ok {
-		return userName, nil
-	} else {
-		return "", xerr.Customf("waring userName")
-	}
-}
-
-func (s *StoreEntry) GetCurrentSystemUser(ctx context.Context) (*model.SystemUser, error) {
-	// 解析token
-	userName, err := s.GetCurrentUserName(ctx)
-	if err != nil {
-		return nil, xerr.WithStack(err)
-	}
-	// 根据用户token获取用户数据
-	systemUser := &model.SystemUser{Name: userName}
-	if err = s.DB.Where("name = ?", userName).
-		Where("is_show = ? and is_delete = ?", pasturePb.IsShow_Ok, pasturePb.IsShow_Ok).
-		First(systemUser).Error; err != nil {
-		if errors.Is(err, gorm.ErrRecordNotFound) {
-			return nil, xerr.Custom("该用户数据不存在")
-		}
-		return nil, xerr.WithStack(err)
-	}
-	return systemUser, nil
-}
-
 // GetSystemUserMenu 返回系统用户相关菜单权限
 func (s *StoreEntry) GetSystemUserMenu(ctx context.Context) (*pasturePb.SystemUserMenuTreeResponse, error) {
 	// 解析token