Browse Source

feature:
1.更新pdmaner配置
2.更新上下文存储信息

ZZH-wl 2 years ago
parent
commit
152d9e5d27

+ 25 - 7
doc/订单全流程管理平台.pdma.json

@@ -2,9 +2,9 @@
   "name": "订单全流程管理平台",
   "describe": "订单全流程管理平台",
   "avatar": "",
-  "version": "4.1.1",
-  "createdTime": "2022-12-6 07:35:33",
-  "updatedTime": "2023-1-5 10:48:12",
+  "version": "4.2.2",
+  "createdTime": "2023-1-6 11:43:05",
+  "updatedTime": "2023-1-6 11:43:05",
   "dbConns": [],
   "profile": {
     "default": {
@@ -11634,6 +11634,24 @@
           "notes": {},
           "id": "BD26C064-7BB5-4B2F-B462-0204CF0A0347"
         },
+        {
+          "defKey": "prod_id",
+          "defName": "关联产品",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": true,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "domain": "16120F75-6AA7-4483-868D-F07F511BB081",
+          "refDict": "",
+          "extProps": {},
+          "notes": {},
+          "id": "812C6609-3FE8-454F-BE38-1829D55490C9"
+        },
         {
           "defKey": "name",
           "defName": "产品名称",
@@ -11699,7 +11717,7 @@
           "hideInGraph": false,
           "refDict": "",
           "extProps": {},
-          "domain": "6BC8F04B-6CFA-4995-98D3-318F5CDD774E",
+          "domain": "C3B1681B-99F9-4818-9E80-DE1652A51D85",
           "id": "3A8526D9-EBBA-4DA0-A6CD-71B224D17702"
         },
         {
@@ -11716,7 +11734,7 @@
           "hideInGraph": false,
           "refDict": "",
           "extProps": {},
-          "domain": "6BC8F04B-6CFA-4995-98D3-318F5CDD774E",
+          "domain": "C3B1681B-99F9-4818-9E80-DE1652A51D85",
           "id": "EA13B6AB-39D6-440F-B7DD-2BFF30F68038"
         },
         {
@@ -11750,7 +11768,7 @@
           "hideInGraph": false,
           "refDict": "",
           "extProps": {},
-          "domain": "6BC8F04B-6CFA-4995-98D3-318F5CDD774E",
+          "domain": "C3B1681B-99F9-4818-9E80-DE1652A51D85",
           "id": "DEC06D76-4CEB-49DD-B4A9-29690B3141EE"
         },
         {
@@ -11767,7 +11785,7 @@
           "hideInGraph": false,
           "refDict": "",
           "extProps": {},
-          "domain": "6BC8F04B-6CFA-4995-98D3-318F5CDD774E",
+          "domain": "C3B1681B-99F9-4818-9E80-DE1652A51D85",
           "id": "94C71517-F3A6-4A1A-B308-7F9E10C23922"
         },
         {

+ 35 - 5
opms_admin/app/service/context.go

@@ -2,29 +2,36 @@ package service
 
 import (
 	"context"
-	"dashoo.cn/micro/app/dao"
-	"dashoo.cn/micro/app/model"
-	"dashoo.cn/opms_libary/micro_srv"
-	"dashoo.cn/opms_libary/request"
 	"fmt"
+	"reflect"
+
 	"github.com/gogf/gf/container/gset"
 	"github.com/gogf/gf/database/gdb"
 	"github.com/gogf/gf/errors/gerror"
 	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/os/glog"
 	"github.com/gogf/gf/util/gconv"
-	"reflect"
+
+	"dashoo.cn/micro/app/dao"
+	"dashoo.cn/micro/app/model"
+	"dashoo.cn/opms_libary/micro_srv"
+	"dashoo.cn/opms_libary/request"
 )
 
 // Context 上下文管理服务
 type contextService struct {
 	Tenant  string            `json:"tenant"`
 	Table   string            `json:"table"`
+	Ctx     context.Context   `json:"ctx"`
 	CxtUser *request.UserInfo `json:"cxtUser"`
 }
 
 // Init 初始化上下文对象指针到上下文对象中,以便后续的请求流程中可以修改。
 func (c *contextService) Init(ctx context.Context) (*contextService, error) {
+	cs := ctx.Value("contextService")
+	if cs != nil {
+		return cs.(*contextService), nil
+	}
 	c = new(contextService)
 	// 获取租户码
 	tenant, err := micro_srv.GetTenant(ctx)
@@ -42,6 +49,8 @@ func (c *contextService) Init(ctx context.Context) (*contextService, error) {
 		}
 		c.CxtUser = &userInfo
 	}
+
+	c.Ctx = context.WithValue(ctx, "contextService", c)
 	return c, nil
 }
 
@@ -156,3 +165,24 @@ func (c *contextService) GetCxtUserDeptId() int {
 	}
 	return c.CxtUser.DeptId
 }
+
+func (c *contextService) GetCxtUserRoles() []string {
+	if c.CxtUser == nil {
+		return []string{}
+	}
+	return c.CxtUser.Roles
+}
+
+func (c *contextService) GetCxtUserPosts() []string {
+	if c.CxtUser == nil {
+		return []string{}
+	}
+	return c.CxtUser.Posts
+}
+
+func (c *contextService) GetCxtUserGroups() []string {
+	if c.CxtUser == nil {
+		return []string{}
+	}
+	return c.CxtUser.Groups
+}

+ 37 - 15
opms_admin/app/service/sys_user.go

@@ -40,10 +40,10 @@ func NewUserService(ctx context.Context) (svc *userService, err error) {
 func (s *userService) Login(username, password string) (*request.UserInfo, error) {
 	record, err := s.Dao.Where("user_name", username).Where("status='10'").FindOne()
 	if err != nil {
-		return nil, errors.New("系统异常")
+		return nil, gerror.New("系统异常")
 	}
 	if record == nil {
-		return nil, errors.New("账号或密码错误,或限制登录")
+		return nil, gerror.New("账号或密码错误,或限制登录")
 	}
 	// 验证密码
 	if utils.EncryptPassword(password, record.UserSalt) != record.Password {
@@ -58,15 +58,10 @@ func (s *userService) Login(username, password string) (*request.UserInfo, error
 		return nil, err
 	}
 	// 权限
-	//permissionService, err := permission.NewService(s.Tenant)
-	//if err != nil {
-	//	return nil, errors.New("系统异常,请重新尝试")
-	//}
-	//userRoles, err := permissionService.GetRoleIdsByUser(userInfo.Id)
-	//if err != nil {
-	//	return nil, err
-	//}
-	//userInfo.Roles = userRoles
+	userInfo.Roles, userInfo.Posts, userInfo.Groups, err = s.GetUserPermission(userInfo.Id)
+	if err != nil {
+		return nil, gerror.New("获取用户权限失败")
+	}
 	return userInfo, nil
 }
 
@@ -120,8 +115,8 @@ func (s *userService) GetUserList(req *model.SysUserSearchReq) (total int, userL
 	return
 }
 
-// 获取部门下用户
-func (s userService) GetUserByDept(deptId int) (userList []*model.SysUser, err error) {
+// GetUserByDept 获取部门下用户
+func (s *userService) GetUserByDept(deptId int) (userList []*model.SysUser, err error) {
 	count, err := dao.NewSysDeptDao(s.Tenant).Where(dao.SysDept.Columns.Id, deptId).Where(dao.SysDept.Columns.Status, "10").Count()
 	if err != nil {
 		return nil, err
@@ -133,8 +128,8 @@ func (s userService) GetUserByDept(deptId int) (userList []*model.SysUser, err e
 	return userList, err
 }
 
-// 获取角色关联的用户
-func (s userService) GetUserByRole(roleId int) (userList []*model.SysUser, err error) {
+// GetUserByRole 获取角色关联的用户
+func (s *userService) GetUserByRole(roleId int) (userList []*model.SysUser, err error) {
 	count, err := dao.NewSysRoleDao(s.Tenant).Where(dao.SysRole.Columns.Id, roleId).Where(dao.SysRole.Columns.Status, "10").Count()
 	if err != nil {
 		return nil, err
@@ -204,6 +199,33 @@ func (s *userService) GetUserInfoById(id int, withPwd ...bool) (user *model.SysU
 	return
 }
 
+// GetUserPermission 获取用户权限字符(角色、岗位、用户组)
+func (s *userService) GetUserPermission(userId int) ([]string, []string, []string, error) {
+	s.userRoleDao = dao.NewSysUserRoleDao(s.Tenant)
+	s.userPostDao = dao.NewSysUserPostDao(s.Tenant)
+	s.userGroupDao = dao.NewSysUserGroupDao(s.Tenant)
+	roleList, err := s.userRoleDao.As("user_role").LeftJoin(dao.SysRole.Table, "role", "user_role.role_id=role.id").
+		Fields(dao.SysRole.Columns.RoleKey).Where(s.userRoleDao.Columns.UserId, userId).Array()
+	if err != nil {
+		g.Log().Error(err)
+		return nil, nil, nil, err
+	}
+	postList, err := s.userPostDao.As("user_post").LeftJoin(dao.SysPost.Table, "post", "user_post.post_id=post.id").
+		Fields(dao.SysPost.Columns.PostCode).Where(s.userPostDao.Columns.UserId, userId).Array()
+	if err != nil {
+		g.Log().Error(err)
+		return nil, nil, nil, err
+	}
+	groupList, err := s.userGroupDao.As("user_group").LeftJoin(dao.SysGroup.Table, "group", "user_group.group_id=group.id").
+		Fields(dao.SysGroup.Columns.GroupCode).Where(s.userGroupDao.Columns.UserId, userId).Array()
+	if err != nil {
+		g.Log().Error(err)
+		return nil, nil, nil, err
+	}
+
+	return gconv.Strings(roleList), gconv.Strings(postList), gconv.Strings(groupList), err
+}
+
 // GetUserRoleIds 获取用户角色
 func (s *userService) GetUserRoleIds(userId int) (roleIds []int, err error) {
 	s.userRoleDao = dao.NewSysUserRoleDao(s.Tenant)

+ 8 - 6
opms_libary/request/request.go

@@ -29,12 +29,14 @@ func (p *PageReq) GetPage() (int, int) {
 
 // UserInfo 登录用户信息
 type UserInfo struct {
-	Id       int    `json:"id"`
-	Uuid     string `json:"uuid"`
-	UserName string `json:"userName"`
-	NickName string `json:"nickName"`
-	DeptId   int    `json:"deptId"` // 所属部门
-	Roles    string `json:"roles"`  // 所属角色
+	Id       int      `json:"id"`
+	Uuid     string   `json:"uuid"`
+	UserName string   `json:"userName"`
+	NickName string   `json:"nickName"`
+	DeptId   int      `json:"deptId"` // 所属部门
+	Roles    []string `json:"roles"`  // 所属角色
+	Posts    []string `json:"posts"`  // 所属岗位
+	Groups   []string `json:"groups"` // 所属用户组
 }
 
 // 设置当前登录用户信息

+ 1 - 1
opms_parent/app/service/base.go

@@ -7,7 +7,7 @@ import (
 )
 
 var (
-	// CommonUpdateFieldEx, UpdateFieldEx 更新过滤字段
+	// CommonUpdateFieldEx  UpdateFieldEx 更新过滤字段
 	CommonUpdateFieldEx = []interface{}{"created_by", "created_name", "created_time"}
 	UpdateFieldEx       = []interface{}{"id", "created_by", "created_name", "created_time"}
 )

+ 31 - 2
opms_parent/app/service/context.go

@@ -3,19 +3,26 @@ package service
 import (
 	"context"
 
+	"github.com/gogf/gf/os/glog"
+
 	"dashoo.cn/opms_libary/micro_srv"
 	"dashoo.cn/opms_libary/request"
-	"github.com/gogf/gf/os/glog"
 )
 
-// Context 上下文管理服务
+// ContextService 上下文管理服务
 type ContextService struct {
 	Tenant  string            `json:"tenant"`
+	Table   string            `json:"table"`
+	Ctx     context.Context   `json:"ctx"`
 	CxtUser *request.UserInfo `json:"cxtUser"`
 }
 
 // Init 初始化上下文对象指针到上下文对象中,以便后续的请求流程中可以修改。
 func (c *ContextService) Init(ctx context.Context) (*ContextService, error) {
+	cs := ctx.Value("contextService")
+	if cs != nil {
+		return cs.(*ContextService), nil
+	}
 	c = new(ContextService)
 	// 获取租户码
 	tenant, err := micro_srv.GetTenant(ctx)
@@ -33,6 +40,7 @@ func (c *ContextService) Init(ctx context.Context) (*ContextService, error) {
 		}
 		c.CxtUser = &userInfo
 	}
+	c.Ctx = context.WithValue(ctx, "contextService", c)
 	return c, nil
 }
 
@@ -63,3 +71,24 @@ func (c *ContextService) GetCxtUserDeptId() int {
 	}
 	return c.CxtUser.DeptId
 }
+
+func (c *ContextService) GetCxtUserRoles() []string {
+	if c.CxtUser == nil {
+		return []string{}
+	}
+	return c.CxtUser.Roles
+}
+
+func (c *ContextService) GetCxtUserPosts() []string {
+	if c.CxtUser == nil {
+		return []string{}
+	}
+	return c.CxtUser.Posts
+}
+
+func (c *ContextService) GetCxtUserGroups() []string {
+	if c.CxtUser == nil {
+		return []string{}
+	}
+	return c.CxtUser.Groups
+}