Browse Source

system: userDepth update

Yi 6 days ago
parent
commit
3cdec61592

+ 1 - 1
go.mod

@@ -3,7 +3,7 @@ module kpt-pasture
 go 1.17
 
 require (
-	gitee.com/xuyiping_admin/go_proto v0.0.0-20250526094651-0cef600addd0
+	gitee.com/xuyiping_admin/go_proto v0.0.0-20250530051007-6ce1b83221af
 	gitee.com/xuyiping_admin/pkg v0.0.0-20250514071642-f92d2ac9a85d
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible
 	github.com/eclipse/paho.mqtt.golang v1.4.3

+ 4 - 0
go.sum

@@ -127,6 +127,10 @@ gitee.com/xuyiping_admin/go_proto v0.0.0-20250526091836-9e663a273679 h1:Ulh1ArxG
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250526091836-9e663a273679/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250526094651-0cef600addd0 h1:nGmhS9BKCMgCz9zEVmygDIPNrolI9lb9uLV6NfoTxWE=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250526094651-0cef600addd0/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250530040106-85ff23fe88f6 h1:UjId/C6diIwgYo/gh5cqVNpa9TSYyAsi1H/zlMqy/vs=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250530040106-85ff23fe88f6/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250530051007-6ce1b83221af h1:3SBlTKUWyBz4l86klizGDt/xda/7j9PGsRiUyZb+yX8=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250530051007-6ce1b83221af/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=
 gitee.com/xuyiping_admin/pkg v0.0.0-20250514071642-f92d2ac9a85d h1:vBXmMRggF7mZVPGRDgavZ87igJgkezwX0a3v1/XtIMQ=

+ 0 - 30
http/handler/system/menu.go

@@ -14,36 +14,6 @@ import (
 	"github.com/gin-gonic/gin"
 )
 
-// CreatedOrUpdateSystemMenu 添加或者更新系统菜单权限
-func CreatedOrUpdateSystemMenu(c *gin.Context) {
-	var req pasturePb.SearchMenuRequest
-	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.Title, valid.Required),
-		valid.Field(&req.MenuType, valid.Required, valid.Min(0), valid.Max(2)),
-		valid.Field(&req.Path, valid.Required),
-	); err != nil {
-		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
-		return
-	}
-
-	if err := middleware.BackendOperation(c).OpsService.CreateOrUpdateSystemMenu(c, &req); err != nil {
-		apierr.ClassifiedAbort(c, err)
-		return
-	}
-
-	ginutil.JSONResp(c, &operationPb.CommonOK{
-		Code: http.StatusOK,
-		Msg:  "ok",
-		Data: &operationPb.Success{Success: true},
-	})
-}
-
 // SearchSystemMenuList 菜单列表查询
 func SearchSystemMenuList(c *gin.Context) {
 	var req pasturePb.SearchMenuRequest

+ 1 - 1
http/handler/system/user.go

@@ -48,7 +48,7 @@ func UserCreateOrUpdate(c *gin.Context) {
 
 	if err := valid.ValidateStruct(&req,
 		valid.Field(&req.Name, valid.Required),
-		valid.Field(&req.DepthList, valid.Required),
+		valid.Field(&req.PastureDepthList, valid.Required),
 		valid.Field(&req.Mobile, valid.Required),
 		valid.Field(&req.Password, valid.Required),
 	); err != nil {

+ 1 - 3
http/route/system_api.go

@@ -37,13 +37,11 @@ func SystemAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		systemRoute.POST("/role/createOrUpdate", system.RoleCreateOrUpdate)
 		systemRoute.GET("/role/menu/:id", system.GetRoleMenu)
 		systemRoute.POST("/role/menu/save", system.RoleMenuSave)
-		//systemRoute.GET("/role/list", system.GetRoleList)
 
 		// 系统菜单权限
 		systemRoute.POST("/menu/list", system.SearchSystemMenuList)
-		systemRoute.DELETE("/menu/:id", system.DeleteSystemMenu)
-		systemRoute.POST("/menu/createOrUpdate", system.CreatedOrUpdateSystemMenu)
 		systemRoute.GET("/menu/tree", system.GetSystemMenuTree)
+		//systemRoute.DELETE("/menu/:id", system.DeleteSystemMenu)
 
 		// 系统部门
 		systemRoute.POST("/dept/list", system.DeptList)

+ 1 - 0
model/indicators_data.go

@@ -14,6 +14,7 @@ const (
 	OutputNumber                     = "output_number"        // 出栏量(销售)
 	InputNumber                      = "input_number"         // 入栏量(购入)
 	SalesVolume                      = "sales_volume"         // 销售额
+	FattenCattleNumber               = "fatten_cattle_number" // 育肥牛头数
 	CalvingNumber                    = "calving_number"       // 产犊事件总数
 	AdultAbortionRate                = "adult_abortion_rate"  //成母牛流产率(全)
 	YouthAbortionRate                = "youth_abortion_rate"  //青年年流产率(全)

+ 13 - 5
model/system_dept.go

@@ -25,17 +25,25 @@ func (s *SystemDept) TableName() string {
 	return "system_dept"
 }
 
-func NewSystemDept(req *pasturePb.SearchDeptRequest) *SystemDept {
+func (s *SystemDept) DepthUpdate(req *pasturePb.SearchDeptRequest) {
+	s.Name = req.Name
+	s.ParentId = int64(req.ParentId)
+	s.Sort = req.Sort
+	s.Remarks = req.Remarks
+	s.IsShow = req.IsShow
+	s.IsDelete = req.IsDelete
+}
+
+func NewSystemDept(pastureId int64, req *pasturePb.SearchDeptRequest) *SystemDept {
 	return &SystemDept{
-		PastureId: int64(req.PastureId),
+		PastureId: pastureId,
 		Name:      req.Name,
 		Remarks:   req.Remarks,
 		DeptType:  pasturePb.Depth_Company,
 		LeaderId:  int64(req.LeaderId),
 		ParentId:  int64(req.ParentId),
-
-		IsShow:   pasturePb.IsShow_Ok,
-		IsDelete: pasturePb.IsShow_Ok,
+		IsShow:    pasturePb.IsShow_Ok,
+		IsDelete:  pasturePb.IsShow_Ok,
 	}
 }
 

+ 63 - 26
model/system_menu.go

@@ -5,12 +5,11 @@ import (
 	"time"
 
 	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
-
-	operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
 )
 
 type SystemMenu struct {
 	Id              int64                   `json:"id"`
+	PastureId       int64                   `json:"pastureId"`
 	Name            string                  `json:"name"`
 	Title           string                  `json:"title"`
 	Path            string                  `json:"path"`
@@ -18,39 +17,77 @@ type SystemMenu struct {
 	Component       string                  `json:"component"`
 	Redirect        string                  `json:"redirect"`
 	Auths           string                  `json:"auths"`
-	MenuType        pasturePb.MenuType_Kind `json:"menu_type"`
-	ParentId        int64                   `json:"parent_id"`
+	MenuType        pasturePb.MenuType_Kind `json:"menuType"`
+	ParentId        int64                   `json:"parentId"`
 	Rank            int32                   `json:"rank"`
-	ExtraIcon       string                  `json:"extra_icon"`
-	EnterTransition string                  `json:"enter_transition"`
-	ActivePath      string                  `json:"active_path"`
-	FrameSrc        string                  `json:"frame_src"`
-	FrameLoading    pasturePb.IsShow_Kind   `json:"frame_loading"`
+	ExtraIcon       string                  `json:"extraIcon"`
+	EnterTransition string                  `json:"enterTransition"`
+	ActivePath      string                  `json:"activePath"`
+	FrameSrc        string                  `json:"frameSrc"`
+	FrameLoading    pasturePb.IsShow_Kind   `json:"frameLoading"`
 	Keepalive       pasturePb.IsShow_Kind   `json:"keepalive"`
-	HiddenTag       pasturePb.IsShow_Kind   `json:"hidden_tag"`
-	ShowLink        pasturePb.IsShow_Kind   `json:"show_link"`
-	ShowParent      pasturePb.IsShow_Kind   `json:"show_parent"`
-	IsShow          pasturePb.IsShow_Kind   `json:"is_show"`
-	IsDelete        pasturePb.IsShow_Kind   `json:"is_delete"`
-	CreatedAt       int64                   `json:"created_at"`
-	UpdatedAt       int64                   `json:"updated_at"`
+	HiddenTag       pasturePb.IsShow_Kind   `json:"hiddenTag"`
+	ShowLink        pasturePb.IsShow_Kind   `json:"showLink"`
+	ShowParent      pasturePb.IsShow_Kind   `json:"showParent"`
+	IsShow          pasturePb.IsShow_Kind   `json:"isShow"`
+	IsDelete        pasturePb.IsShow_Kind   `json:"isDelete"`
+	CreatedAt       int64                   `json:"createdAt"`
+	UpdatedAt       int64                   `json:"updatedAt"`
 }
 
 func (s *SystemMenu) TableName() string {
 	return "system_menu"
 }
 
-func NewSystemMenu(req *operationPb.AddMenuRequest) *SystemMenu {
+func (s *SystemMenu) MenuUpdate(req *pasturePb.SearchMenuRequest) {
+	s.Name = req.Name
+	s.Path = req.Path
+	s.MenuType = req.MenuType
+	s.Title = req.Title
+	s.ParentId = int64(req.ParentId)
+	s.FrameSrc = req.FrameSrc
+	s.FrameLoading = BooleanToIsShow(req.FrameLoading)
+	s.Keepalive = BooleanToIsShow(req.Keepalive)
+	s.HiddenTag = BooleanToIsShow(req.HiddenTag)
+	s.ShowLink = BooleanToIsShow(req.ShowLink)
+	s.ShowParent = BooleanToIsShow(req.ShowParent)
+	s.Icon = req.Icon
+	s.Component = req.Component
+	s.Redirect = req.Redirect
+	s.Auths = req.Auths
+	s.Rank = req.Rank
+	s.ExtraIcon = req.ExtraIcon
+	s.EnterTransition = req.EnterTransition
+	s.ActivePath = req.ActivePath
+	s.IsShow = req.IsShow
+	s.IsDelete = req.IsDelete
+}
+
+// NewSystemMenu AddMenuRequest
+func NewSystemMenu(pastureId int64, req *pasturePb.SearchMenuRequest) *SystemMenu {
 	return &SystemMenu{
-		Name:      req.Name,
-		Title:     req.Title,
-		Path:      req.Path,
-		Component: req.Component,
-		Icon:      req.Icon,
-		Redirect:  req.Redirect,
-		ParentId:  int64(req.ParentId),
-		IsShow:    pasturePb.IsShow_Ok,
-		IsDelete:  pasturePb.IsShow_Ok,
+		PastureId:       pastureId,
+		Name:            req.Name,
+		Title:           req.Title,
+		Path:            req.Path,
+		Icon:            req.Icon,
+		Component:       req.Component,
+		Redirect:        req.Redirect,
+		Auths:           req.Auths,
+		MenuType:        req.MenuType,
+		ParentId:        int64(req.ParentId),
+		Rank:            req.Rank,
+		ExtraIcon:       req.ExtraIcon,
+		EnterTransition: req.EnterTransition,
+		ActivePath:      req.ActivePath,
+		FrameSrc:        req.FrameSrc,
+		FrameLoading:    BooleanToIsShow(req.FrameLoading),
+		Keepalive:       BooleanToIsShow(req.Keepalive),
+		HiddenTag:       BooleanToIsShow(req.HiddenTag),
+		ShowLink:        BooleanToIsShow(req.ShowLink),
+		ShowParent:      BooleanToIsShow(req.ShowParent),
+		IsShow:          pasturePb.IsShow_Ok,
+		IsDelete:        pasturePb.IsShow_Ok,
 	}
 }
 

+ 32 - 14
model/system_role.go

@@ -6,20 +6,6 @@ import (
 	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
 )
 
-type SystemRole struct {
-	Id        int64                 `json:"id,omitempty"`
-	Name      string                `json:"name,omitempty"`
-	Remarks   string                `json:"remarks,omitempty"`
-	IsShow    pasturePb.IsShow_Kind `json:"is_show,omitempty"`
-	IsDelete  pasturePb.IsShow_Kind `json:"is_delete,omitempty"`
-	CreatedAt int64                 `json:"created_at,omitempty"`
-	UpdatedAt int64                 `json:"updated_at,omitempty"`
-}
-
-func (s *SystemRole) TableName() string {
-	return "system_role"
-}
-
 const (
 	LayoutTime   = "2006-01-02 15:04:05"
 	LayoutDate   = "20060102"
@@ -31,6 +17,38 @@ const (
 	LayoutTime2  = "2006/1/2 15:04:05"
 )
 
+type SystemRole struct {
+	Id        int64                 `json:"id"`
+	PastureId int64                 `json:"pastureId"`
+	Name      string                `json:"name"`
+	Remarks   string                `json:"remarks"`
+	IsShow    pasturePb.IsShow_Kind `json:"isShow"`
+	IsDelete  pasturePb.IsShow_Kind `json:"isDelete"`
+	CreatedAt int64                 `json:"createdAt"`
+	UpdatedAt int64                 `json:"updatedAt"`
+}
+
+func (s *SystemRole) TableName() string {
+	return "system_role"
+}
+
+func (s *SystemRole) RoleUpdate(req *pasturePb.SearchRoleRequest) {
+	s.Name = req.Name
+	s.Remarks = req.Remarks
+	s.IsShow = req.IsShow
+	s.IsDelete = req.IsDelete
+}
+
+func NewSystemRole(pastureId int64, req *pasturePb.SearchRoleRequest) *SystemRole {
+	return &SystemRole{
+		PastureId: pastureId,
+		Name:      req.Name,
+		Remarks:   req.Remarks,
+		IsShow:    pasturePb.IsShow_Ok,
+		IsDelete:  pasturePb.IsShow_Ok,
+	}
+}
+
 type SystemRoleSlice []*SystemRole
 
 func (s SystemRoleSlice) ToPB() []*pasturePb.SearchRoleRequest {

+ 40 - 44
model/system_user.go

@@ -2,26 +2,24 @@ package model
 
 import (
 	"fmt"
-	"net/http"
 	"strconv"
 	"strings"
 	"time"
 
 	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
-	operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
 )
 
 type SystemUser struct {
 	Id              int64                  `json:"id"`
 	Name            string                 `json:"name"`
 	NickName        string                 `json:"nickName"`
+	Gender          pasturePb.Genders_Kind `json:"gender"`
 	Mobile          string                 `json:"mobile"`
 	Password        string                 `json:"password"`
 	Avatar          string                 `json:"avatar"`
 	RoleIds         string                 `json:"roleIds"`
 	DeptIds         string                 `json:"deptIds"`
 	IndicatorsKinds string                 `json:"indicatorsKinds"`
-	Gender          pasturePb.Genders_Kind `json:"gender"`
 	PastureIds      string                 `json:"pastureIds"`
 	IsShow          pasturePb.IsShow_Kind  `json:"isShow"`
 	IsDelete        pasturePb.IsShow_Kind  `json:"isDelete"`
@@ -34,23 +32,32 @@ func (s *SystemUser) TableName() string {
 	return "system_user"
 }
 
-func (s *SystemUser) SystemUserFormat(userRoles []*SystemRole, pastures []*operationPb.UserPasture) *operationPb.UserAuth {
-	roles := make([]*operationPb.UserRole, len(userRoles))
-	for k, v := range userRoles {
-		roles[k] = &operationPb.UserRole{
-			Id:   int32(v.Id),
-			Name: v.Name,
-		}
-	}
+func (s *SystemUser) UserUpdate(req *pasturePb.SearchUserRequest, deptIds, pastureIds string) {
+	s.Name = req.Name
+	s.NickName = req.NickName
+	s.Mobile = req.Mobile
+	s.Gender = req.Gender
+	s.DeptIds = deptIds
+	s.Remarks = req.Remarks
+	s.IsShow = req.IsShow
+	s.PastureIds = pastureIds
+}
 
-	return &operationPb.UserAuth{
-		Code: http.StatusOK,
-		Msg:  "ok",
-		Data: &operationPb.UserAuthData{
-			UserName: s.Name,
-			Roles:    roles,
-			Pastures: pastures,
-		},
+func NewSystemUser(req *pasturePb.SearchUserRequest, deptIds, pastureIds string) *SystemUser {
+	return &SystemUser{
+		Name:            req.Name,
+		NickName:        req.NickName,
+		Gender:          req.Gender,
+		Mobile:          req.Mobile,
+		Password:        req.Password,
+		Avatar:          "",
+		RoleIds:         "",
+		DeptIds:         deptIds,
+		IndicatorsKinds: fmt.Sprintf("%s,%s,%s,%s,%s,%s", AllCow, OutNumber, InputNumber, SalesVolume, FattenCattleNumber, AdultCow),
+		PastureIds:      pastureIds,
+		IsShow:          pasturePb.IsShow_Ok,
+		IsDelete:        pasturePb.IsShow_Ok,
+		Remarks:         req.Remarks,
 	}
 }
 
@@ -66,13 +73,13 @@ func (s *SystemUser) GetPastureIds() []int64 {
 	return res
 }
 
-func (s *SystemUser) GetRoleIds() []int64 {
-	res := make([]int64, 0)
+func (s *SystemUser) GetRoleIds() []int32 {
+	res := make([]int32, 0)
 	if s.RoleIds != "" {
 		roleIds := strings.Split(s.RoleIds, ",")
 		for _, idStr := range roleIds {
 			id, _ := strconv.Atoi(idStr)
-			res = append(res, int64(id))
+			res = append(res, int32(id))
 		}
 	}
 	return res
@@ -119,7 +126,6 @@ func (s SystemUserSlice) ToPB(deptList []*SystemDept, roleList []*SystemRole) []
 						Name: de.Name,
 					})
 				}
-
 			}
 		}
 
@@ -137,17 +143,17 @@ func (s SystemUserSlice) ToPB(deptList []*SystemDept, roleList []*SystemRole) []
 		}
 
 		res[i] = &pasturePb.SearchUserRequest{
-			Id:              int32(v.Id),
-			Name:            v.Name,
-			Mobile:          v.Mobile,
-			NickName:        v.NickName,
-			Avatar:          v.Avatar,
-			Gender:          v.Gender,
-			IsShow:          v.IsShow,
-			IsDelete:        v.IsDelete,
-			Remarks:         v.Remarks,
-			DepthList:       userDeptList,
-			RoleList:        userRoleList,
+			Id:       int32(v.Id),
+			Name:     v.Name,
+			Mobile:   v.Mobile,
+			NickName: v.NickName,
+			Avatar:   v.Avatar,
+			Gender:   v.Gender,
+			IsShow:   v.IsShow,
+			IsDelete: v.IsDelete,
+			Remarks:  v.Remarks,
+			//PastureDepthList: userDeptList,
+			//RoleList:         userRoleList,
 			CreatedAtFormat: time.Unix(v.CreatedAt, 0).Local().Format(LayoutTime),
 			UpdatedAtFormat: time.Unix(v.UpdatedAt, 0).Local().Format(LayoutTime),
 		}
@@ -155,16 +161,6 @@ func (s SystemUserSlice) ToPB(deptList []*SystemDept, roleList []*SystemRole) []
 	return res
 }
 
-func (s *SystemUser) ToPb() *operationPb.AddSystemUser {
-	return &operationPb.AddSystemUser{
-		Id:              int32(s.Id),
-		Name:            s.Name,
-		CreatedAt:       int32(s.CreatedAt),
-		CreatedAtFormat: time.Unix(s.CreatedAt, 0).Local().Format(LayoutTime),
-		RoleIds:         []int32{},
-	}
-}
-
 func (s SystemUserSlice) ToPB2() []*pasturePb.ConfigOptionsList {
 	res := make([]*pasturePb.ConfigOptionsList, len(s))
 	for i, d := range s {

+ 4 - 2
module/backend/enum_options.go

@@ -146,18 +146,20 @@ func (s *StoreEntry) CowTransferPenReasonOptions(ctx context.Context) (*pastureP
 	}, nil
 }
 
+// SystemUserOptions 系统用户下拉框   todo 待优化
 func (s *StoreEntry) SystemUserOptions(ctx context.Context, depId int) (*pasturePb.ConfigOptionsListResponse, error) {
-	_, err := s.GetUserModel(ctx)
+	userModel, err := s.GetUserModel(ctx)
 	if err != nil {
 		return nil, xerr.WithStack(err)
 	}
 
 	systemUserList := make([]*model.SystemUser, 0)
 	pref := s.DB.Table(new(model.SystemUser).TableName()).
+		Where("pasture_id = ?", userModel.AppPasture.Id).
 		Where("is_delete = ?", pasturePb.IsShow_Ok).
 		Where("is_show =? ", pasturePb.IsShow_Ok)
 	if depId != -1 && depId > 0 {
-		pref = pref.Where("dept_id = ?", depId)
+		pref = pref.Where("FIND_IN_SET('?',dept_ids) > ?", depId, 0)
 	}
 
 	if err = pref.Find(&systemUserList).Error; err != nil {

+ 0 - 1
module/backend/interface.go

@@ -86,7 +86,6 @@ type SystemService interface {
 	// SearchSystemMenuList 系统菜单权限
 	SearchSystemMenuList(ctx context.Context, req *pasturePb.SearchMenuRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchMenuResponse, error)
 	DeleteSystemMenu(ctx context.Context, menuId int64) error
-	CreateOrUpdateSystemMenu(ctx context.Context, req *pasturePb.SearchMenuRequest) error
 	SystemMenuTree(ctx context.Context) (*pasturePb.SystemMenuTreeResponse, error)
 
 	// SearchSystemDeptList 部门列表

+ 12 - 5
module/backend/prescription.go

@@ -51,7 +51,9 @@ func (s *StoreEntry) SearchSameTimeList(ctx context.Context, req *pasturePb.Sear
 	}
 	semeTimeList := make([]*model.SameTime, 0)
 	var count int64 = 0
-	pref := s.DB.Model(new(model.SameTime)).Where("pasture_id = ?", userModel.AppPasture.Id)
+	pastureId := userModel.AppPasture.Id
+	pref := s.DB.Model(new(model.SameTime)).
+		Where("pasture_id = ?", pastureId)
 	if req.Name != "" {
 		pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
 	}
@@ -66,7 +68,7 @@ func (s *StoreEntry) SearchSameTimeList(ctx context.Context, req *pasturePb.Sear
 
 	weekMap := s.WeekMap()
 	sameTimeCowTypeMap := s.SameTimeCowTypeMap()
-	systemUser, _ := s.SystemUserList(ctx)
+	systemUser, _ := s.SystemUserList(ctx, pastureId)
 	return &pasturePb.SameTimeResponse{
 		Code: http.StatusOK,
 		Msg:  "ok",
@@ -111,8 +113,10 @@ func (s *StoreEntry) SearchDiseaseList(ctx context.Context, req *pasturePb.Searc
 	}
 	diseaseList := make([]*model.Disease, 0)
 	var count int64 = 0
+	pastureId := userModel.AppPasture.Id
 
-	pref := s.DB.Model(new(model.Disease)).Where("pasture_id = ?", userModel.AppPasture.Id)
+	pref := s.DB.Model(new(model.Disease)).
+		Where("pasture_id = ?", pastureId)
 	if req.Name != "" {
 		pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
 	}
@@ -121,12 +125,15 @@ func (s *StoreEntry) SearchDiseaseList(ctx context.Context, req *pasturePb.Searc
 		pref.Where("disease_type = ?", req.DiseaseTypeId)
 	}
 
-	if err = pref.Order("id desc").Count(&count).Limit(int(pagination.PageSize)).Offset(int(pagination.PageOffset)).
+	if err = pref.Order("id desc").
+		Count(&count).
+		Limit(int(pagination.PageSize)).
+		Offset(int(pagination.PageOffset)).
 		Find(&diseaseList).Error; err != nil {
 		return nil, xerr.WithStack(err)
 	}
 
-	systemUserList, _ := s.SystemUserList(ctx)
+	systemUserList, _ := s.SystemUserList(ctx, pastureId)
 	diseaseTypeList, _ := s.DiseaseTypeList(ctx)
 
 	return &pasturePb.SearchDiseaseResponse{

+ 189 - 113
module/backend/system_service.go

@@ -7,7 +7,6 @@ import (
 	"kpt-pasture/model"
 	"kpt-pasture/util"
 	"net/http"
-	"strconv"
 	"strings"
 	"time"
 
@@ -46,7 +45,9 @@ func (s *StoreEntry) Login(ctx context.Context, req *pasturePb.SearchUserRequest
 		return nil, xerr.Customf("该账号已被删除,请联系管理员")
 	}
 
-	zaplog.Info("Login", zap.Any("systemUser", systemUser))
+	if len(systemUser.PastureIds) <= 0 {
+		return nil, xerr.Custom("当前用户未配置相关牧场数据,请联系管理员!")
+	}
 
 	systemRoleList := make([]*model.SystemRole, 0)
 	if err := s.DB.Model(new(model.SystemRole)).
@@ -104,6 +105,7 @@ func (s *StoreEntry) SearchSystemUserList(ctx context.Context, req *pasturePb.Se
 	pref := s.DB.Model(new(model.SystemUser)).
 		Where("is_delete = ?", operationPb.IsShow_OK).
 		Where("FIND_IN_SET(?, pasture_ids) > ?", userModel.AppPasture.Id, 0)
+
 	if req.Name != "" {
 		pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
 	}
@@ -112,18 +114,12 @@ func (s *StoreEntry) SearchSystemUserList(ctx context.Context, req *pasturePb.Se
 		pref.Where("mobile = ?", req.Mobile)
 	}
 
-	if req.DepthId > 0 {
-		systemDept := &model.SystemDept{}
-		if err = s.DB.Model(new(model.SystemDept)).Where("id = ?", req.DepthId).
-			Where("is_delete = ?", operationPb.IsShow_OK).
-			First(systemDept).Error; err != nil {
-			return nil, xerr.Custom("部门信息错误")
-		}
-
-		pref.Where("pasture_id = ?", systemDept.PastureId)
-		if systemDept.DeptType == pasturePb.Depth_Department {
-			pref.Where("dept_id = ?", req.DepthId)
+	if len(req.DepthId) > 0 {
+		depthIds := ""
+		for _, v := range req.DepthId {
+			depthIds += fmt.Sprintf("%d,", v)
 		}
+		pref.Where("dept_ids = ?", strings.TrimRight(depthIds, ","))
 	}
 
 	if req.IsShow > 0 {
@@ -160,9 +156,11 @@ func (s *StoreEntry) SearchSystemUserList(ctx context.Context, req *pasturePb.Se
 	}, nil
 }
 
-func (s *StoreEntry) SystemUserList(ctx context.Context) ([]*model.SystemUser, error) {
+func (s *StoreEntry) SystemUserList(ctx context.Context, pastureId int64) ([]*model.SystemUser, error) {
 	systemUserList := make([]*model.SystemUser, 0)
-	if err := s.DB.Where("is_delete = ?", pasturePb.IsShow_Ok).
+	if err := s.DB.Model(new(model.SystemUser)).
+		Where("pasture_id = ?", pastureId).
+		Where("is_delete = ?", pasturePb.IsShow_Ok).
 		Where("is_show = ? ", pasturePb.IsShow_Ok).
 		Find(&systemUserList).Error; err != nil {
 		return nil, xerr.WithStack(err)
@@ -172,9 +170,7 @@ func (s *StoreEntry) SystemUserList(ctx context.Context) ([]*model.SystemUser, e
 
 // DeleteSystemUser 删除系统用户
 func (s *StoreEntry) DeleteSystemUser(ctx context.Context, userId int64) error {
-	systemUser := &model.SystemUser{
-		Id: userId,
-	}
+	systemUser := &model.SystemUser{Id: userId}
 	if err := s.DB.Model(new(model.SystemUser)).First(systemUser).Error; err != nil {
 		if errors.Is(err, gorm.ErrRecordNotFound) {
 			return xerr.Custom("该用户不存在")
@@ -203,7 +199,8 @@ func (s *StoreEntry) IsShowSystemUser(ctx context.Context, userId int64) error {
 		isShow = pasturePb.IsShow_Ok
 	}
 
-	if err := s.DB.Model(systemUser).Update("is_show", isShow).Error; err != nil {
+	if err := s.DB.Model(systemUser).
+		Update("is_show", isShow).Error; err != nil {
 		return xerr.WithStack(err)
 	}
 	return nil
@@ -211,67 +208,70 @@ func (s *StoreEntry) IsShowSystemUser(ctx context.Context, userId int64) error {
 
 // SystemUserCreateOrUpdate 创建或者更新系统用户
 func (s *StoreEntry) SystemUserCreateOrUpdate(ctx context.Context, req *pasturePb.SearchUserRequest) error {
+	deptIds, pastureIds := "", ""
+	for _, pasture := range req.PastureDepthList {
+		pastureIds += fmt.Sprintf("%d,", pasture.PastureId)
+		if len(pasture.DepthList) > 0 {
+			for _, dept := range pasture.DepthList {
+				deptIds += fmt.Sprintf("%d,", dept.Id)
+			}
+		}
+	}
+
 	systemUser := &model.SystemUser{}
 	if req.Id > 0 {
 		systemUser.Id = int64(req.Id)
-		if err := s.DB.Model(new(model.SystemUser)).First(systemUser).Error; err != nil {
+		if err := s.DB.Model(new(model.SystemUser)).
+			First(systemUser).Error; err != nil {
+			return xerr.WithStack(err)
+		}
+
+		systemUser.UserUpdate(req, deptIds, pastureIds)
+		if err := s.DB.Model(new(model.SystemUser)).
+			Select("name", "nick_name", "mobile", "gender", "dept_ids", "pasture_ids", "remarks", "is_show").
+			Where("id = ?", systemUser.Id).
+			Updates(systemUser).Error; err != nil {
 			return xerr.WithStack(err)
 		}
-		req.Password = systemUser.Password
+
 	} else {
+		var count int64
 		if err := s.DB.Model(new(model.SystemUser)).
 			Where("name = ?", req.Name).
-			First(systemUser).Error; err != nil {
-			if !errors.Is(err, gorm.ErrRecordNotFound) {
-				return xerr.WithStack(err)
-			}
-		} else if systemUser.Id > 0 {
-			return xerr.Custom("该用户名称已经存在")
+			Where("mobile = ?", req.Mobile).
+			Where("is_show = ?", pasturePb.IsShow_Ok).
+			Count(&count).Error; err != nil {
+			return xerr.WithStack(err)
 		}
-	}
 
-	deptIds := ""
-	if len(req.DepthList) > 0 {
-		for _, dept := range req.DepthList {
-			deptIds += fmt.Sprintf("%d,", dept.Id)
+		if count > 0 {
+			return xerr.Customf("系统中该用户名称已经存在: %s_%s", req.Name, req.Mobile)
+		}
+
+		newSystemUser := model.NewSystemUser(req, deptIds, pastureIds)
+		if err := s.DB.Model(new(model.SystemUser)).
+			Create(newSystemUser).Error; err != nil {
+			return xerr.WithStack(err)
 		}
 	}
-	if len(deptIds) > 0 {
-		deptIds = strings.TrimRight(deptIds, ",")
-	}
-
-	if err := s.DB.Model(&model.SystemUser{}).
-		Where(map[string]interface{}{
-			"id": req.Id,
-		}).Assign(map[string]interface{}{
-		"name":      req.Name,
-		"nick_name": req.NickName,
-		"mobile":    req.Mobile,
-		"gender":    req.Gender,
-		"password":  req.Password,
-		"dept_ids":  deptIds,
-		"remarks":   req.Remarks,
-		"is_delete": operationPb.IsShow_OK,
-		"is_show":   req.IsShow,
-	}).FirstOrCreate(&model.SystemUser{}).Error; err != nil {
-		return xerr.WithStack(err)
-	}
+
 	return nil
 }
 
 // ResetPasswordSystemUser 重置系统用户密码
 func (s *StoreEntry) ResetPasswordSystemUser(ctx context.Context, req *pasturePb.ResetUserPasswordRequest) error {
-	systemUser := &model.SystemUser{
-		Id: int64(req.Id),
-	}
-	if err := s.DB.First(systemUser).Error; err != nil {
+	systemUser := &model.SystemUser{}
+	if err := s.DB.Model(new(model.SystemUser)).
+		Where("id = ?", req.Id).
+		First(systemUser).Error; err != nil {
 		if errors.Is(err, gorm.ErrRecordNotFound) {
 			return xerr.Custom("该用户不存在")
 		}
 		return xerr.WithStack(err)
 	}
 
-	if err := s.DB.Model(systemUser).Update("password", req.Password).Error; err != nil {
+	if err := s.DB.Model(systemUser).
+		Update("password", req.Password).Error; err != nil {
 		return xerr.WithStack(err)
 	}
 	return nil
@@ -279,50 +279,63 @@ func (s *StoreEntry) ResetPasswordSystemUser(ctx context.Context, req *pasturePb
 
 func (s *StoreEntry) SystemUserRole(ctx context.Context, userId int64) (*pasturePb.SystemUserRoleResponse, error) {
 	systemUser := &model.SystemUser{Id: userId}
-	if err := s.DB.First(systemUser).Error; err != nil {
+	if err := s.DB.Model(new(model.SystemUser)).
+		First(systemUser).Error; err != nil {
 		if errors.Is(err, gorm.ErrRecordNotFound) {
 			return nil, xerr.Custom("该用户不存在")
 		}
 		return nil, xerr.WithStack(err)
 	}
 
-	roleIds := make([]int32, 0)
-	if len(systemUser.RoleIds) > 0 {
-		roleIdsString := strings.Split(systemUser.RoleIds, ",")
-		for _, r := range roleIdsString {
-			r1, _ := strconv.Atoi(r)
-			roleIds = append(roleIds, int32(r1))
-		}
+	if systemUser.IsDelete == pasturePb.IsShow_No {
+		return nil, xerr.Custom("该用户已删除")
 	}
+
 	return &pasturePb.SystemUserRoleResponse{
 		Code: http.StatusOK,
 		Msg:  "ok",
 		Data: &pasturePb.UserRoleData{
-			RoleIds: roleIds,
+			RoleIds: systemUser.GetRoleIds(),
 		},
 	}, nil
 }
 
 func (s *StoreEntry) SystemUserRoleSave(ctx context.Context, req *pasturePb.SystemUserRoleRequest) error {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return xerr.WithStack(err)
+	}
+
 	systemUser := &model.SystemUser{Id: int64(req.UserId)}
-	if err := s.DB.First(systemUser).Error; err != nil {
+	if err = s.DB.Model(new(model.SystemUser)).
+		First(systemUser).Error; err != nil {
 		if errors.Is(err, gorm.ErrRecordNotFound) {
 			return xerr.Custom("该用户不存在")
 		}
 		return xerr.WithStack(err)
 	}
 
+	if systemUser.IsDelete == pasturePb.IsShow_No {
+		return xerr.Custom("该用户已删除")
+	}
+
+	if systemUser.IsShow == pasturePb.IsShow_No {
+		return xerr.Custom("该用户已禁用")
+	}
+
 	systemRoleList := make([]*model.SystemRole, 0)
-	if err := s.DB.Model(new(model.SystemRole)).
+	if err = s.DB.Model(new(model.SystemRole)).
+		Where("pasture_id = ?", userModel.AppPasture.Id).
 		Where("is_delete = ?", pasturePb.IsShow_Ok).
 		Where("id IN ?", req.RoleIds).
 		Find(&systemRoleList).Error; err != nil {
-		if errors.Is(err, gorm.ErrRecordNotFound) {
-			return xerr.Custom("该角色不存在")
-		}
 		return xerr.WithStack(err)
 	}
 
+	if len(systemRoleList) <= 0 {
+		return xerr.Custom("该用户没有角色")
+	}
+
 	roleIdsStr := ""
 	for _, systemRole := range systemRoleList {
 		roleIdsStr += fmt.Sprintf("%d,", systemRole.Id)
@@ -332,7 +345,7 @@ func (s *StoreEntry) SystemUserRoleSave(ctx context.Context, req *pasturePb.Syst
 		roleIdsStr = strings.TrimRight(roleIdsStr, ",")
 	}
 
-	if err := s.DB.Model(systemUser).
+	if err = s.DB.Model(systemUser).
 		Update("role_ids", roleIdsStr).Error; err != nil {
 		return xerr.WithStack(err)
 	}
@@ -350,10 +363,9 @@ func (s *StoreEntry) GetSystemUserMenu(ctx context.Context) (*pasturePb.SystemUs
 		return nil, xerr.Custom("该用户没有角色")
 	}
 
-	roleIds := strings.Split(systemUser.RoleIds, ",")
 	// 获取用户角色数据
 	systemRoleList := make([]*model.SystemRole, 0)
-	if err = s.DB.Where("id IN ?", roleIds).
+	if err = s.DB.Where("id IN ?", systemUser.GetRoleIds()).
 		Find(&systemRoleList).Error; err != nil {
 		if errors.Is(err, gorm.ErrRecordNotFound) {
 			return nil, xerr.Custom("该用户角色不存在")
@@ -365,7 +377,7 @@ func (s *StoreEntry) GetSystemUserMenu(ctx context.Context) (*pasturePb.SystemUs
 	if err = s.DB.Table(fmt.Sprintf("%s as a", new(model.SystemRoleMenu).TableName())).
 		Select("b.*").
 		Joins("LEFT JOIN system_menu AS b ON a.menu_id = b.id").
-		Where("a.role_id IN ? and b.is_delete = ?", roleIds, pasturePb.IsShow_Ok).
+		Where("a.role_id IN ? and b.is_delete = ?", systemUser.GetRoleIds(), pasturePb.IsShow_Ok).
 		Find(&systemMenuList).Error; err != nil {
 		return nil, xerr.WithStack(err)
 	}
@@ -380,37 +392,60 @@ func (s *StoreEntry) GetSystemUserMenu(ctx context.Context) (*pasturePb.SystemUs
 
 // SystemRoleCreateOrUpdate 添加角色
 func (s *StoreEntry) SystemRoleCreateOrUpdate(ctx context.Context, req *pasturePb.SearchRoleRequest) error {
-	isShow := pasturePb.IsShow_Ok
-	if req.Id > 0 {
-		isShow = req.IsShow
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return xerr.WithStack(err)
 	}
 
-	if err := s.DB.Model(&model.SystemRole{}).Where(map[string]interface{}{
-		"id": req.Id,
-	}).Assign(map[string]interface{}{
-		"name":      req.Name,
-		"remarks":   req.Remarks,
-		"is_delete": operationPb.IsShow_OK,
-		"is_show":   isShow,
-	}).FirstOrCreate(&model.SystemRole{}).Error; err != nil {
-		return xerr.WithStack(err)
+	if req.Id > 0 {
+		systemRole := &model.SystemRole{}
+		if err = s.DB.Model(systemRole).
+			Where("id = ?", req.Id).
+			Where("pasture_id = ?", userModel.AppPasture.Id).
+			First(systemRole).Error; err != nil {
+			return xerr.WithStack(err)
+		}
+
+		if systemRole.IsDelete == pasturePb.IsShow_No {
+			return xerr.Custom("角色已删除")
+		}
+
+		systemRole.RoleUpdate(req)
+		if err = s.DB.Model(systemRole).
+			Select("name", "remarks", "is_show", "is_delete").
+			Where("id = ?", req.Id).
+			Where("pasture_id = ?", userModel.AppPasture.Id).
+			Updates(systemRole).Error; err != nil {
+			return xerr.WithStack(err)
+		}
+
+	} else {
+		newSystemRole := model.NewSystemRole(userModel.AppPasture.Id, req)
+		if err = s.DB.Model(new(model.SystemRole)).Create(newSystemRole).Error; err != nil {
+			return xerr.WithStack(err)
+		}
 	}
+
 	return nil
 }
 
 // DeleteSystemRole 删除系统角色
 func (s *StoreEntry) DeleteSystemRole(ctx context.Context, roleId int64) error {
-	systemRole := &model.SystemRole{
-		Id: roleId,
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return xerr.WithStack(err)
 	}
-	if err := s.DB.First(systemRole).Error; err != nil {
-		if errors.Is(err, gorm.ErrRecordNotFound) {
-			return xerr.Custom("该数据不存在")
-		}
+	systemRole := &model.SystemRole{}
+	if err = s.DB.Model(new(model.SystemRole)).
+		Where("id = ? ", roleId).
+		Where("pasture_id = ?", userModel.AppPasture.Id).
+		Where("is_delete = ?", pasturePb.IsShow_Ok).
+		First(systemRole).Error; err != nil {
 		return xerr.WithStack(err)
 	}
 
-	if err := s.DB.Model(systemRole).Update("is_delete", pasturePb.IsShow_No).Error; err != nil {
+	if err = s.DB.Model(systemRole).
+		Update("is_delete", pasturePb.IsShow_No).Error; err != nil {
 		return xerr.WithStack(err)
 	}
 	return nil
@@ -418,21 +453,28 @@ func (s *StoreEntry) DeleteSystemRole(ctx context.Context, roleId int64) error {
 
 // IsShowSystemRole 角色是否启用
 func (s *StoreEntry) IsShowSystemRole(ctx context.Context, roleId int64) error {
-	systemRole := &model.SystemRole{
-		Id: roleId,
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return xerr.WithStack(err)
 	}
-	if err := s.DB.First(systemRole).Error; err != nil {
+	systemRole := &model.SystemRole{}
+	if err = s.DB.Model(new(model.SystemRole)).
+		Where("id = ?", roleId).
+		Where("pasture_id = ?", userModel.AppPasture.Id).
+		Where("is_delete = ?", pasturePb.IsShow_Ok).
+		First(systemRole).Error; err != nil {
 		if errors.Is(err, gorm.ErrRecordNotFound) {
 			return xerr.Custom("该角色不存在")
 		}
 		return xerr.WithStack(err)
 	}
+
 	isShow := pasturePb.IsShow_No
 	if systemRole.IsShow == pasturePb.IsShow_No {
 		isShow = pasturePb.IsShow_Ok
 	}
 
-	if err := s.DB.Model(systemRole).Update("is_show", isShow).Error; err != nil {
+	if err = s.DB.Model(systemRole).Update("is_show", isShow).Error; err != nil {
 		return xerr.WithStack(err)
 	}
 	return nil
@@ -440,10 +482,17 @@ func (s *StoreEntry) IsShowSystemRole(ctx context.Context, roleId int64) error {
 
 // SearchSystemRoleList 查询系统角色
 func (s *StoreEntry) SearchSystemRoleList(ctx context.Context, req *pasturePb.SearchRoleRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchRoleResponse, error) {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
 	systemRoleList := make([]*model.SystemRole, 0)
 	var count int64 = 0
 
-	pref := s.DB.Model(new(model.SystemRole)).Where("is_delete = ?", operationPb.IsShow_OK)
+	pref := s.DB.Model(new(model.SystemRole)).
+		Where("pasture_id = ?", userModel.AppPasture.Id).
+		Where("is_delete = ?", operationPb.IsShow_OK)
 	if req.Name != "" {
 		pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
 	}
@@ -452,8 +501,11 @@ func (s *StoreEntry) SearchSystemRoleList(ctx context.Context, req *pasturePb.Se
 		pref.Where("is_show = ?", req.IsShow)
 	}
 
-	if err := pref.Order("id desc").Count(&count).Limit(int(pagination.PageSize)).
-		Offset(int(pagination.PageOffset)).Find(&systemRoleList).Error; err != nil {
+	if err = pref.Order("is_show asc,id desc").
+		Count(&count).
+		Limit(int(pagination.PageSize)).
+		Offset(int(pagination.PageOffset)).
+		Find(&systemRoleList).Error; err != nil {
 		return nil, xerr.WithStack(err)
 	}
 
@@ -511,29 +563,47 @@ func (s *StoreEntry) GetRoleMenuList(ctx context.Context, roleId int64) (*pastur
 
 // RoleMenuSave 保存系统角色对应的菜单数据
 func (s *StoreEntry) RoleMenuSave(ctx context.Context, res *pasturePb.SystemRoleMenuRequest) error {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return xerr.WithStack(err)
+	}
+
 	if len(res.MenuIds) <= 0 {
 		return xerr.Custom("请选择菜单")
 	}
-	systemRole := &model.SystemRole{
-		Id: int64(res.RoleId),
-	}
 
-	if err := s.DB.First(systemRole).Error; err != nil {
+	systemRole := &model.SystemRole{}
+	if err = s.DB.Model(new(model.SystemRole)).
+		Where("id = ?", res.RoleId).
+		Where("pasture_id = ?", userModel.AppPasture.Id).
+		First(systemRole).Error; err != nil {
 		if errors.Is(err, gorm.ErrRecordNotFound) {
 			return xerr.Custom("该数据不存在")
 		}
 		return xerr.WithStack(err)
 	}
 
-	if err := s.DB.Transaction(func(tx *gorm.DB) error {
-		if err := tx.Model(new(model.SystemRoleMenu)).Where("role_id = ?", systemRole.Id).Delete(&model.SystemRoleMenu{}).Error; err != nil {
+	if systemRole.IsDelete == pasturePb.IsShow_No {
+		return xerr.Custom("该数据已删除")
+	}
+
+	if systemRole.IsShow == pasturePb.IsShow_No {
+		return xerr.Custom("该数据已禁用")
+	}
+
+	if err = s.DB.Transaction(func(tx *gorm.DB) error {
+		if err = tx.Model(new(model.SystemRoleMenu)).
+			Where("role_id = ?", systemRole.Id).
+			Delete(&model.SystemRoleMenu{}).
+			Error; err != nil {
 			return xerr.WithStack(err)
 		}
 		for _, menuId := range res.MenuIds {
-			if err := tx.Create(&model.SystemRoleMenu{
-				RoleId: systemRole.Id,
-				MenuId: int64(menuId),
-			}).Error; err != nil {
+			if err = tx.Model(new(model.SystemRoleMenu)).
+				Create(&model.SystemRoleMenu{
+					RoleId: systemRole.Id,
+					MenuId: int64(menuId),
+				}).Error; err != nil {
 				return xerr.WithStack(err)
 			}
 		}
@@ -545,9 +615,15 @@ func (s *StoreEntry) RoleMenuSave(ctx context.Context, res *pasturePb.SystemRole
 }
 
 func (s *StoreEntry) SystemRoleList(ctx context.Context) (*pasturePb.GetRoleListResponse, error) {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
 	systemRoleList := make([]*model.SystemRole, 0)
-	if err := s.DB.Model(new(model.SystemRole)).
-		Where("is_delete = ? and is_show = ?", pasturePb.IsShow_Ok, pasturePb.IsShow_Ok).
+	if err = s.DB.Model(new(model.SystemRole)).
+		Where("is_delete = ?", pasturePb.IsShow_Ok).
+		Where("pasture_id = ?", userModel.AppPasture.Id).
 		Find(&systemRoleList).Error; err != nil {
 		return nil, xerr.WithStack(err)
 	}

+ 108 - 63
module/backend/system_service_more.go

@@ -19,50 +19,53 @@ import (
 
 // CreateOrUpdateSystemMenu 添加或者更新系统菜单权限
 func (s *StoreEntry) CreateOrUpdateSystemMenu(ctx context.Context, req *pasturePb.SearchMenuRequest) error {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return xerr.WithStack(err)
+	}
+
 	if req.Id > 0 {
-		systemMenu := &model.SystemMenu{Id: int64(req.Id)}
-		if err := s.DB.Model(&model.SystemMenu{}).First(systemMenu).Error; err != nil {
-			if !errors.Is(err, gorm.ErrRecordNotFound) {
-				return xerr.WithStack(err)
-			}
+		systemMenu := &model.SystemMenu{}
+		if err = s.DB.Model(new(model.SystemMenu)).
+			Where("id = ?", req.Id).
+			Where("pasture_id = ?", userModel.AppPasture.Id).
+			First(systemMenu).Error; err != nil {
+			return xerr.WithStack(err)
 		}
-	}
 
-	if err := s.DB.Model(&model.SystemMenu{}).Where(map[string]interface{}{
-		"id": req.Id,
-	}).Assign(map[string]interface{}{
-		"name":             req.Name,
-		"path":             req.Path,
-		"title":            req.Title,
-		"menu_type":        req.MenuType,
-		"parent_id":        req.ParentId,
-		"frame_src":        req.FrameSrc,
-		"frame_loading":    model.BooleanToIsShow(req.FrameLoading),
-		"keepalive":        model.BooleanToIsShow(req.Keepalive),
-		"hidden_tag":       model.BooleanToIsShow(req.HiddenTag),
-		"show_link":        model.BooleanToIsShow(req.ShowLink),
-		"show_parent":      model.BooleanToIsShow(req.ShowParent),
-		"icon":             req.Icon,
-		"component":        req.Component,
-		"redirect":         req.Redirect,
-		"auths":            req.Auths,
-		"rank":             req.Rank,
-		"extra_icon":       req.ExtraIcon,
-		"enter_transition": req.EnterTransition,
-		"leave_transition": req.LeaveTransition,
-		"active_path":      req.ActivePath,
-		"is_delete":        pasturePb.IsShow_Ok,
-		"is_show":          pasturePb.IsShow_Ok,
-	}).FirstOrCreate(&model.SystemMenu{}).Error; err != nil {
-		return xerr.WithStack(err)
+		// 更新数据
+		systemMenu.MenuUpdate(req)
+		if err = s.DB.Model(new(model.SystemMenu)).
+			Select("name", "path", "title", "menu_type", "parent_id", "frame_src", "frame_loading",
+				"keepalive", "hidden_tag", "show_link", "show_parent", "icon", "component", "redirect", "auths",
+				"rank", "extra_icon", "enter_transition", "leave_transition", "active_path", "is_delete", "is_show").
+			Where("id = ?", req.Id).
+			Where("pasture_id = ?", userModel.AppPasture.Id).
+			Updates(systemMenu).
+			Error; err != nil {
+			return xerr.WithStack(err)
+		}
+	} else {
+		newSystemMenu := model.NewSystemMenu(userModel.AppPasture.Id, req)
+		if err = s.DB.Model(new(model.SystemMenu)).Create(newSystemMenu).Error; err != nil {
+			return xerr.WithStack(err)
+		}
 	}
+
 	return nil
 }
 
 func (s *StoreEntry) SystemMenuTree(ctx context.Context) (*pasturePb.SystemMenuTreeResponse, error) {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return nil, xerr.WithStack(err)
+	}
 	systemMenuList := make([]*model.SystemMenu, 0)
-	if err := s.DB.Model(new(model.SystemMenu)).Where("is_delete = ?", pasturePb.IsShow_Ok).
-		Where("is_show = ?", pasturePb.IsShow_Ok).Find(&systemMenuList).Error; err != nil {
+	if err = s.DB.Model(new(model.SystemMenu)).
+		Where("pasture_id = ?", userModel.AppPasture.Id).
+		Where("is_delete = ?", pasturePb.IsShow_Ok).
+		Where("is_show = ?", pasturePb.IsShow_Ok).
+		Find(&systemMenuList).Error; err != nil {
 		return nil, xerr.WithStack(err)
 	}
 	return &pasturePb.SystemMenuTreeResponse{
@@ -74,12 +77,21 @@ func (s *StoreEntry) SystemMenuTree(ctx context.Context) (*pasturePb.SystemMenuT
 
 // SearchSystemMenuList 菜单列表查询
 func (s *StoreEntry) SearchSystemMenuList(ctx context.Context, req *pasturePb.SearchMenuRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchMenuResponse, error) {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return nil, xerr.WithStack(err)
+	}
 	systemMenuList := make([]*model.SystemMenu, 0)
 	var count int64 = 0
 
-	if err := s.DB.Model(new(model.SystemMenu)).
-		Where("is_delete = ? ", operationPb.IsShow_OK).
-		Order("parent_id").Count(&count).
+	pref := s.DB.Model(new(model.SystemMenu)).
+		Where("pasture_id = ? ", userModel.AppPasture.Id).
+		Where("is_delete = ? ", operationPb.IsShow_OK)
+	if req.Name != "" {
+		pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
+	}
+
+	if err = pref.Order("parent_id").Count(&count).
 		Find(&systemMenuList).Error; err != nil {
 		return nil, xerr.WithStack(err)
 	}
@@ -98,25 +110,44 @@ func (s *StoreEntry) SearchSystemMenuList(ctx context.Context, req *pasturePb.Se
 
 // DeleteSystemMenu 删除系统菜单
 func (s *StoreEntry) DeleteSystemMenu(ctx context.Context, menuId int64) error {
-	systemMenu := &model.SystemMenu{Id: menuId}
-	if err := s.DB.First(systemMenu).Error; err != nil {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return xerr.WithStack(err)
+	}
+
+	systemMenu := &model.SystemMenu{}
+	if err = s.DB.Model(new(model.SystemMenu)).
+		Where("id = ?", menuId).
+		Where("pasture_id = ?", userModel.AppPasture.Id).
+		First(systemMenu).Error; err != nil {
 		if errors.Is(err, gorm.ErrRecordNotFound) {
 			return xerr.Custom("该数据不存在")
 		}
 		return xerr.WithStack(err)
 	}
 
-	if err := s.DB.Model(systemMenu).Update("is_delete", pasturePb.IsShow_No).Error; err != nil {
+	if err = s.DB.Model(new(model.SystemMenu)).
+		Where("id = ?", menuId).
+		Update("is_delete", pasturePb.IsShow_No).
+		Error; err != nil {
 		return xerr.WithStack(err)
 	}
 	return nil
 }
 
 func (s *StoreEntry) SearchSystemDeptList(ctx context.Context, req *pasturePb.SearchDeptRequest, pagination *pasturePb.PaginationModel) (*pasturePb.SearchDeptResponse, error) {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
 	deptList := make([]*model.SystemDept, 0)
 	var count int64 = 0
+	pastureId := userModel.AppPasture.Id
 	pref := s.DB.Model(new(model.SystemDept)).
+		Where("pasture_id = ?", pastureId).
 		Where("is_delete = ?", operationPb.IsShow_OK)
+
 	if req.Name != "" {
 		pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%"))
 	}
@@ -125,7 +156,7 @@ func (s *StoreEntry) SearchSystemDeptList(ctx context.Context, req *pasturePb.Se
 		pref.Where("is_show = ?", req.IsShow)
 	}
 
-	if err := pref.Order("sort desc").
+	if err = pref.Order("sort desc").
 		Count(&count).
 		Limit(int(pagination.PageSize)).
 		Offset(int(pagination.PageOffset)).
@@ -133,7 +164,7 @@ func (s *StoreEntry) SearchSystemDeptList(ctx context.Context, req *pasturePb.Se
 		return nil, xerr.WithStack(err)
 	}
 
-	systemUserList, _ := s.SystemUserList(ctx)
+	systemUserList, _ := s.SystemUserList(ctx, pastureId)
 
 	return &pasturePb.SearchDeptResponse{
 		Code: http.StatusOK,
@@ -148,49 +179,63 @@ func (s *StoreEntry) SearchSystemDeptList(ctx context.Context, req *pasturePb.Se
 }
 
 func (s *StoreEntry) SystemDepDelete(ctx context.Context, id int64) error {
-	dept := &model.SystemDept{Id: id}
-	if err := s.DB.First(dept).Error; err != nil {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return xerr.WithStack(err)
+	}
+
+	dept := &model.SystemDept{}
+	if err = s.DB.Model(new(model.SystemDept)).
+		Where("id = ?", id).
+		Where("pasture_id = ?", userModel.AppPasture.Id).
+		First(dept).Error; err != nil {
 		return xerr.WithStack(err)
 	}
 
 	if dept.IsShow == pasturePb.IsShow_No {
 		return nil
 	}
-	if err := s.DB.Model(dept).Update("is_delete", operationPb.IsShow_NO).Error; err != nil {
+	if err = s.DB.Model(new(model.SystemDept)).
+		Update("is_delete", operationPb.IsShow_NO).
+		Error; err != nil {
 		return xerr.WithStack(err)
 	}
 	return nil
 }
 
 func (s *StoreEntry) SystemDeptCreateOrUpdate(ctx context.Context, req *pasturePb.SearchDeptRequest) error {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return xerr.WithStack(err)
+	}
+	pastureId := userModel.AppPasture.Id
 	if req.Id > 0 {
 		systemDept := &model.SystemDept{}
-		if err := s.DB.Model(new(model.SystemDept)).
+		if err = s.DB.Model(new(model.SystemDept)).
 			Where("id = ?", req.Id).
-			Where("pasture_id = ?", req.PastureId).
+			Where("pasture_id = ?", pastureId).
+			Where("is_delete = ?", pasturePb.IsShow_Ok).
 			First(systemDept).Error; err != nil {
-			zaplog.Error("部门信息错误", zap.Any("req", req))
+			zaplog.Error("SystemDeptCreateOrUpdate", zap.Any("req", req), zap.Any("err", err))
+			return xerr.Customf("部门信息错误: %s", err.Error())
 		}
-		if err := s.DB.Model(systemDept).
-			Where("id = ?", req.Id).
-			Where("pasture_id = ?", req.PastureId).
-			Updates(map[string]interface{}{
-				"name":      req.Name,
-				"parent_id": req.ParentId,
-				"sort":      req.Sort,
-				"remarks":   req.Remarks,
-				"is_show":   req.IsShow,
-				"is_delete": req.IsDelete,
-			}).Error; err != nil {
+
+		// 更新部门信息
+		systemDept.DepthUpdate(req)
+		if err = s.DB.Model(new(model.SystemDept)).
+			Where("id = ?", systemDept.Id).
+			Where("pasture_id = ?", pastureId).
+			Select("name", "parent_id", "sort", "remarks", "is_show", "is_delete").
+			Updates(systemDept).Error; err != nil {
 			return xerr.WithStack(err)
 		}
 	} else {
-		newSystemDepth := model.NewSystemDept(req)
-		if err := s.DB.Model(&model.SystemDept{}).Create(newSystemDepth).Error; err != nil {
+		newSystemDepth := model.NewSystemDept(pastureId, req)
+		if err = s.DB.Model(new(model.SystemDept)).
+			Create(newSystemDepth).Error; err != nil {
 			return xerr.WithStack(err)
 		}
 	}
-
 	return nil
 }
 

+ 1 - 1
module/backend/work.go

@@ -77,7 +77,7 @@ func (s *StoreEntry) OrderCreateOrUpdate(ctx context.Context, req *pasturePb.Wor
 		return xerr.WithStack(err)
 	}
 	workOrderCategoryMap := s.WorkOrderCategoryMap()
-	systemUserList, _ := s.SystemUserList(ctx)
+	systemUserList, _ := s.SystemUserList(ctx, userModel.AppPasture.Id)
 	newWorkOrderMaster := model.NewWorkOrderMaster(userModel.AppPasture.Id, req, userModel.SystemUser, systemUserList, workOrderCategoryMap)
 	if req.Id <= 0 {
 		if err := s.DB.Transaction(func(tx *gorm.DB) error {