Browse Source

feature:基础模块开发
1.菜单管理
2.用户管理
3.格式化代码

ZZH-wl 3 years ago
parent
commit
e1356c5386
38 changed files with 1959 additions and 909 deletions
  1. 1 1
      opms_admin/app/common/gtoken/gtoken.go
  2. 1 1
      opms_admin/app/common/gtoken/gtoken_test.go
  3. 0 6
      opms_admin/app/common/model/req.go
  4. 40 40
      opms_admin/app/dao/internal/sys_config.go
  5. 37 37
      opms_admin/app/dao/internal/sys_dict_type.go
  6. 28 28
      opms_admin/app/dao/internal/sys_login.go
  7. 40 40
      opms_admin/app/dao/internal/sys_notice.go
  8. 49 49
      opms_admin/app/dao/internal/sys_oper_log.go
  9. 7 7
      opms_admin/app/dao/internal/sys_role_menu.go
  10. 3 0
      opms_admin/app/dao/internal/sys_user.go
  11. 7 7
      opms_admin/app/dao/internal/sys_user_post.go
  12. 7 7
      opms_admin/app/dao/internal/sys_user_role.go
  13. 35 49
      opms_admin/app/handler/auth.go
  14. 135 0
      opms_admin/app/handler/menu.go
  15. 558 0
      opms_admin/app/handler/user.go
  16. 4 5
      opms_admin/app/model/context.go
  17. 15 15
      opms_admin/app/model/internal/sys_config.go
  18. 14 14
      opms_admin/app/model/internal/sys_dict_type.go
  19. 11 11
      opms_admin/app/model/internal/sys_login.go
  20. 1 1
      opms_admin/app/model/internal/sys_menu.go
  21. 15 15
      opms_admin/app/model/internal/sys_notice.go
  22. 18 18
      opms_admin/app/model/internal/sys_oper_log.go
  23. 3 5
      opms_admin/app/model/internal/sys_role_menu.go
  24. 1 0
      opms_admin/app/model/internal/sys_user.go
  25. 3 5
      opms_admin/app/model/internal/sys_user_post.go
  26. 3 5
      opms_admin/app/model/internal/sys_user_role.go
  27. 62 1
      opms_admin/app/model/sys_menu.go
  28. 26 27
      opms_admin/app/model/sys_user.go
  29. 65 0
      opms_admin/app/service/base.go
  30. 1 1
      opms_admin/app/service/sys_login_log.go
  31. 223 0
      opms_admin/app/service/sys_menu.go
  32. 1 1
      opms_admin/app/service/sys_oper_log.go
  33. 1 1
      opms_admin/app/service/sys_role.go
  34. 334 510
      opms_admin/app/service/sys_user.go
  35. 4 1
      opms_admin/go.mod
  36. 2 0
      opms_admin/main.go
  37. 1 1
      opms_libary/myerrors/error.go
  38. 203 0
      opms_libary/utils/convert.go

+ 1 - 1
opms_admin/app/common/gtoken/gtoken.go

@@ -1,9 +1,9 @@
 package gtoken
 
 import (
+	"dashoo.cn/opms_libary/utils"
 	"strings"
 
-	"dashoo.cn/micro_libary/utils"
 	"github.com/gogf/gf/crypto/gaes"
 	"github.com/gogf/gf/crypto/gmd5"
 	"github.com/gogf/gf/encoding/gbase64"

+ 1 - 1
opms_admin/app/common/gtoken/gtoken_test.go

@@ -1,7 +1,7 @@
 package gtoken_test
 
 import (
-	"dashoo.cn/auth/gtoken"
+	"dashoo.cn/micro/app/common/gtoken"
 	"github.com/gogf/gf/encoding/gbase64"
 	"testing"
 )

+ 0 - 6
opms_admin/app/common/model/req.go

@@ -12,9 +12,3 @@ type PageReq struct {
 	Ctx       context.Context `swaggerignore:"true"`
 	OrderBy   string          //排序方式
 }
-
-type UpFile struct {
-	Name string `json:"name"`
-	Url  string `json:"url"`
-	Uid  uint64 `json:"uid"`
-}

+ 40 - 40
opms_admin/app/dao/internal/sys_config.go

@@ -26,19 +26,19 @@ type SysConfigDao struct {
 
 // SysConfigColumns defines and stores column names for table sys_config.
 type sysConfigColumns struct {
-	Id           string // 参数主键              
-    ConfigName   string // 参数名称              
-    ConfigKey    string // 参数键名              
-    ConfigValue  string // 参数键值              
-    ConfigType   string // 系统内置(10是20否)  
-    Remark       string // 备注                  
-    CreatedBy    string // 创建者                
-    CreatedName  string // 创建人                
-    CreatedTime  string // 创建时间              
-    UpdatedBy    string // 更新者                
-    UpdatedName  string // 更新人                
-    UpdatedTime  string // 更新时间              
-    DeletedTime  string // 删除时间
+	Id          string // 参数主键
+	ConfigName  string // 参数名称
+	ConfigKey   string // 参数键名
+	ConfigValue string // 参数键值
+	ConfigType  string // 系统内置(10是20否)
+	Remark      string // 备注
+	CreatedBy   string // 创建者
+	CreatedName string // 创建人
+	CreatedTime string // 创建时间
+	UpdatedBy   string // 更新者
+	UpdatedName string // 更新人
+	UpdatedTime string // 更新时间
+	DeletedTime string // 删除时间
 }
 
 var (
@@ -48,19 +48,19 @@ var (
 		DB:    g.DB("default"),
 		Table: "sys_config",
 		Columns: sysConfigColumns{
-			Id:          "id",            
-            ConfigName:  "config_name",   
-            ConfigKey:   "config_key",    
-            ConfigValue: "config_value",  
-            ConfigType:  "config_type",   
-            Remark:      "remark",        
-            CreatedBy:   "created_by",    
-            CreatedName: "created_name",  
-            CreatedTime: "created_time",  
-            UpdatedBy:   "updated_by",    
-            UpdatedName: "updated_name",  
-            UpdatedTime: "updated_time",  
-            DeletedTime: "deleted_time",
+			Id:          "id",
+			ConfigName:  "config_name",
+			ConfigKey:   "config_key",
+			ConfigValue: "config_value",
+			ConfigType:  "config_type",
+			Remark:      "remark",
+			CreatedBy:   "created_by",
+			CreatedName: "created_name",
+			CreatedTime: "created_time",
+			UpdatedBy:   "updated_by",
+			UpdatedName: "updated_name",
+			UpdatedTime: "updated_time",
+			DeletedTime: "deleted_time",
 		},
 	}
 )
@@ -72,19 +72,19 @@ func NewSysConfigDao(tenant string) SysConfigDao {
 		DB:    g.DB(tenant),
 		Table: "sys_config",
 		Columns: sysConfigColumns{
-			Id:          "id",            
-            ConfigName:  "config_name",   
-            ConfigKey:   "config_key",    
-            ConfigValue: "config_value",  
-            ConfigType:  "config_type",   
-            Remark:      "remark",        
-            CreatedBy:   "created_by",    
-            CreatedName: "created_name",  
-            CreatedTime: "created_time",  
-            UpdatedBy:   "updated_by",    
-            UpdatedName: "updated_name",  
-            UpdatedTime: "updated_time",  
-            DeletedTime: "deleted_time",
+			Id:          "id",
+			ConfigName:  "config_name",
+			ConfigKey:   "config_key",
+			ConfigValue: "config_value",
+			ConfigType:  "config_type",
+			Remark:      "remark",
+			CreatedBy:   "created_by",
+			CreatedName: "created_name",
+			CreatedTime: "created_time",
+			UpdatedBy:   "updated_by",
+			UpdatedName: "updated_name",
+			UpdatedTime: "updated_time",
+			DeletedTime: "deleted_time",
 		},
 	}
 	return dao
@@ -429,4 +429,4 @@ func (d *SysConfigDao) LockShared() *SysConfigDao {
 // Unscoped enables/disables the soft deleting feature.
 func (d *SysConfigDao) Unscoped() *SysConfigDao {
 	return &SysConfigDao{M: d.M.Unscoped()}
-}
+}

+ 37 - 37
opms_admin/app/dao/internal/sys_dict_type.go

@@ -26,18 +26,18 @@ type SysDictTypeDao struct {
 
 // SysDictTypeColumns defines and stores column names for table sys_dict_type.
 type sysDictTypeColumns struct {
-	Id           string // 字典主键              
-    DictName     string // 字典名称              
-    DictType     string // 字典类型              
-    Status       string // 状态(10正常20停用)  
-    Remark       string // 备注                  
-    CreatedBy    string // 创建者                
-    CreatedName  string // 创建人                
-    CreatedTime  string // 创建时间              
-    UpdatedBy    string // 更新者                
-    UpdatedName  string // 更新人                
-    UpdatedTime  string // 更新时间              
-    DeletedTime  string // 删除时间
+	Id          string // 字典主键
+	DictName    string // 字典名称
+	DictType    string // 字典类型
+	Status      string // 状态(10正常20停用)
+	Remark      string // 备注
+	CreatedBy   string // 创建者
+	CreatedName string // 创建人
+	CreatedTime string // 创建时间
+	UpdatedBy   string // 更新者
+	UpdatedName string // 更新人
+	UpdatedTime string // 更新时间
+	DeletedTime string // 删除时间
 }
 
 var (
@@ -47,18 +47,18 @@ var (
 		DB:    g.DB("default"),
 		Table: "sys_dict_type",
 		Columns: sysDictTypeColumns{
-			Id:          "id",            
-            DictName:    "dict_name",     
-            DictType:    "dict_type",     
-            Status:      "status",        
-            Remark:      "remark",        
-            CreatedBy:   "created_by",    
-            CreatedName: "created_name",  
-            CreatedTime: "created_time",  
-            UpdatedBy:   "updated_by",    
-            UpdatedName: "updated_name",  
-            UpdatedTime: "updated_time",  
-            DeletedTime: "deleted_time",
+			Id:          "id",
+			DictName:    "dict_name",
+			DictType:    "dict_type",
+			Status:      "status",
+			Remark:      "remark",
+			CreatedBy:   "created_by",
+			CreatedName: "created_name",
+			CreatedTime: "created_time",
+			UpdatedBy:   "updated_by",
+			UpdatedName: "updated_name",
+			UpdatedTime: "updated_time",
+			DeletedTime: "deleted_time",
 		},
 	}
 )
@@ -70,18 +70,18 @@ func NewSysDictTypeDao(tenant string) SysDictTypeDao {
 		DB:    g.DB(tenant),
 		Table: "sys_dict_type",
 		Columns: sysDictTypeColumns{
-			Id:          "id",            
-            DictName:    "dict_name",     
-            DictType:    "dict_type",     
-            Status:      "status",        
-            Remark:      "remark",        
-            CreatedBy:   "created_by",    
-            CreatedName: "created_name",  
-            CreatedTime: "created_time",  
-            UpdatedBy:   "updated_by",    
-            UpdatedName: "updated_name",  
-            UpdatedTime: "updated_time",  
-            DeletedTime: "deleted_time",
+			Id:          "id",
+			DictName:    "dict_name",
+			DictType:    "dict_type",
+			Status:      "status",
+			Remark:      "remark",
+			CreatedBy:   "created_by",
+			CreatedName: "created_name",
+			CreatedTime: "created_time",
+			UpdatedBy:   "updated_by",
+			UpdatedName: "updated_name",
+			UpdatedTime: "updated_time",
+			DeletedTime: "deleted_time",
 		},
 	}
 	return dao
@@ -426,4 +426,4 @@ func (d *SysDictTypeDao) LockShared() *SysDictTypeDao {
 // Unscoped enables/disables the soft deleting feature.
 func (d *SysDictTypeDao) Unscoped() *SysDictTypeDao {
 	return &SysDictTypeDao{M: d.M.Unscoped()}
-}
+}

+ 28 - 28
opms_admin/app/dao/internal/sys_login.go

@@ -26,15 +26,15 @@ type SysLoginDao struct {
 
 // SysLoginColumns defines and stores column names for table sys_login.
 type sysLoginColumns struct {
-	InfoId         string // 访问ID                    
-    UserName       string // 用户账号                  
-    Ipaddr         string // 登录IP地址                
-    LoginLocation  string // 登录地点                  
-    Browser        string // 浏览器类型                
-    Os             string // 操作系统                  
-    Status         string // 登录状态(10成功20失败)  
-    Msg            string // 提示消息                  
-    LoginTime      string // 访问时间
+	InfoId        string // 访问ID
+	UserName      string // 用户账号
+	Ipaddr        string // 登录IP地址
+	LoginLocation string // 登录地点
+	Browser       string // 浏览器类型
+	Os            string // 操作系统
+	Status        string // 登录状态(10成功20失败)
+	Msg           string // 提示消息
+	LoginTime     string // 访问时间
 }
 
 var (
@@ -44,15 +44,15 @@ var (
 		DB:    g.DB("default"),
 		Table: "sys_login",
 		Columns: sysLoginColumns{
-			InfoId:        "info_id",         
-            UserName:      "user_name",       
-            Ipaddr:        "ipaddr",          
-            LoginLocation: "login_location",  
-            Browser:       "browser",         
-            Os:            "os",              
-            Status:        "status",          
-            Msg:           "msg",             
-            LoginTime:     "login_time",
+			InfoId:        "info_id",
+			UserName:      "user_name",
+			Ipaddr:        "ipaddr",
+			LoginLocation: "login_location",
+			Browser:       "browser",
+			Os:            "os",
+			Status:        "status",
+			Msg:           "msg",
+			LoginTime:     "login_time",
 		},
 	}
 )
@@ -64,15 +64,15 @@ func NewSysLoginDao(tenant string) SysLoginDao {
 		DB:    g.DB(tenant),
 		Table: "sys_login",
 		Columns: sysLoginColumns{
-			InfoId:        "info_id",         
-            UserName:      "user_name",       
-            Ipaddr:        "ipaddr",          
-            LoginLocation: "login_location",  
-            Browser:       "browser",         
-            Os:            "os",              
-            Status:        "status",          
-            Msg:           "msg",             
-            LoginTime:     "login_time",
+			InfoId:        "info_id",
+			UserName:      "user_name",
+			Ipaddr:        "ipaddr",
+			LoginLocation: "login_location",
+			Browser:       "browser",
+			Os:            "os",
+			Status:        "status",
+			Msg:           "msg",
+			LoginTime:     "login_time",
 		},
 	}
 	return dao
@@ -417,4 +417,4 @@ func (d *SysLoginDao) LockShared() *SysLoginDao {
 // Unscoped enables/disables the soft deleting feature.
 func (d *SysLoginDao) Unscoped() *SysLoginDao {
 	return &SysLoginDao{M: d.M.Unscoped()}
-}
+}

+ 40 - 40
opms_admin/app/dao/internal/sys_notice.go

@@ -26,19 +26,19 @@ type SysNoticeDao struct {
 
 // SysNoticeColumns defines and stores column names for table sys_notice.
 type sysNoticeColumns struct {
-	Id             string // 公告ID                    
-    NoticeTitle    string // 公告标题                  
-    NoticeType     string // 公告类型(10通知20公告)  
-    NoticeContent  string // 公告内容                  
-    Status         string // 公告状态(10正常20关闭)  
-    Remark         string // 备注                      
-    CreatedBy      string // 创建者                    
-    CreatedName    string // 创建人                    
-    CreatedTime    string // 创建时间                  
-    UpdatedBy      string // 更新者                    
-    UpdatedName    string // 更新人                    
-    UpdatedTime    string // 更新时间                  
-    DeletedTime    string // 删除时间
+	Id            string // 公告ID
+	NoticeTitle   string // 公告标题
+	NoticeType    string // 公告类型(10通知20公告)
+	NoticeContent string // 公告内容
+	Status        string // 公告状态(10正常20关闭)
+	Remark        string // 备注
+	CreatedBy     string // 创建者
+	CreatedName   string // 创建人
+	CreatedTime   string // 创建时间
+	UpdatedBy     string // 更新者
+	UpdatedName   string // 更新人
+	UpdatedTime   string // 更新时间
+	DeletedTime   string // 删除时间
 }
 
 var (
@@ -48,19 +48,19 @@ var (
 		DB:    g.DB("default"),
 		Table: "sys_notice",
 		Columns: sysNoticeColumns{
-			Id:            "id",              
-            NoticeTitle:   "notice_title",    
-            NoticeType:    "notice_type",     
-            NoticeContent: "notice_content",  
-            Status:        "status",          
-            Remark:        "remark",          
-            CreatedBy:     "created_by",      
-            CreatedName:   "created_name",    
-            CreatedTime:   "created_time",    
-            UpdatedBy:     "updated_by",      
-            UpdatedName:   "updated_name",    
-            UpdatedTime:   "updated_time",    
-            DeletedTime:   "deleted_time",
+			Id:            "id",
+			NoticeTitle:   "notice_title",
+			NoticeType:    "notice_type",
+			NoticeContent: "notice_content",
+			Status:        "status",
+			Remark:        "remark",
+			CreatedBy:     "created_by",
+			CreatedName:   "created_name",
+			CreatedTime:   "created_time",
+			UpdatedBy:     "updated_by",
+			UpdatedName:   "updated_name",
+			UpdatedTime:   "updated_time",
+			DeletedTime:   "deleted_time",
 		},
 	}
 )
@@ -72,19 +72,19 @@ func NewSysNoticeDao(tenant string) SysNoticeDao {
 		DB:    g.DB(tenant),
 		Table: "sys_notice",
 		Columns: sysNoticeColumns{
-			Id:            "id",              
-            NoticeTitle:   "notice_title",    
-            NoticeType:    "notice_type",     
-            NoticeContent: "notice_content",  
-            Status:        "status",          
-            Remark:        "remark",          
-            CreatedBy:     "created_by",      
-            CreatedName:   "created_name",    
-            CreatedTime:   "created_time",    
-            UpdatedBy:     "updated_by",      
-            UpdatedName:   "updated_name",    
-            UpdatedTime:   "updated_time",    
-            DeletedTime:   "deleted_time",
+			Id:            "id",
+			NoticeTitle:   "notice_title",
+			NoticeType:    "notice_type",
+			NoticeContent: "notice_content",
+			Status:        "status",
+			Remark:        "remark",
+			CreatedBy:     "created_by",
+			CreatedName:   "created_name",
+			CreatedTime:   "created_time",
+			UpdatedBy:     "updated_by",
+			UpdatedName:   "updated_name",
+			UpdatedTime:   "updated_time",
+			DeletedTime:   "deleted_time",
 		},
 	}
 	return dao
@@ -429,4 +429,4 @@ func (d *SysNoticeDao) LockShared() *SysNoticeDao {
 // Unscoped enables/disables the soft deleting feature.
 func (d *SysNoticeDao) Unscoped() *SysNoticeDao {
 	return &SysNoticeDao{M: d.M.Unscoped()}
-}
+}

+ 49 - 49
opms_admin/app/dao/internal/sys_oper_log.go

@@ -26,22 +26,22 @@ type SysOperLogDao struct {
 
 // SysOperLogColumns defines and stores column names for table sys_oper_log.
 type sysOperLogColumns struct {
-	Id             string // 日志主键                                   
-    Title          string // 模块标题                                   
-    BusinessType   string // 业务类型(10新增 20修改 30删除40其他)     
-    Method         string // 方法名称                                   
-    RequestMethod  string // 请求方式                                   
-    OperatorType   string // 操作类别(10后台用户 20手机端用户30其它)  
-    OperName       string // 操作人员                                   
-    DeptName       string // 部门名称                                   
-    OperUrl        string // 请求URL                                    
-    OperIp         string // 主机地址                                   
-    OperLocation   string // 操作地点                                   
-    OperParam      string // 请求参数                                   
-    JsonResult     string // 返回参数                                   
-    Status         string // 操作状态(10正常20异常)                   
-    ErrorMsg       string // 错误消息                                   
-    OperTime       string // 操作时间
+	Id            string // 日志主键
+	Title         string // 模块标题
+	BusinessType  string // 业务类型(10新增 20修改 30删除40其他)
+	Method        string // 方法名称
+	RequestMethod string // 请求方式
+	OperatorType  string // 操作类别(10后台用户 20手机端用户30其它)
+	OperName      string // 操作人员
+	DeptName      string // 部门名称
+	OperUrl       string // 请求URL
+	OperIp        string // 主机地址
+	OperLocation  string // 操作地点
+	OperParam     string // 请求参数
+	JsonResult    string // 返回参数
+	Status        string // 操作状态(10正常20异常)
+	ErrorMsg      string // 错误消息
+	OperTime      string // 操作时间
 }
 
 var (
@@ -51,22 +51,22 @@ var (
 		DB:    g.DB("default"),
 		Table: "sys_oper_log",
 		Columns: sysOperLogColumns{
-			Id:            "id",              
-            Title:         "title",           
-            BusinessType:  "business_type",   
-            Method:        "method",          
-            RequestMethod: "request_method",  
-            OperatorType:  "operator_type",   
-            OperName:      "oper_name",       
-            DeptName:      "dept_name",       
-            OperUrl:       "oper_url",        
-            OperIp:        "oper_ip",         
-            OperLocation:  "oper_location",   
-            OperParam:     "oper_param",      
-            JsonResult:    "json_result",     
-            Status:        "status",          
-            ErrorMsg:      "error_msg",       
-            OperTime:      "oper_time",
+			Id:            "id",
+			Title:         "title",
+			BusinessType:  "business_type",
+			Method:        "method",
+			RequestMethod: "request_method",
+			OperatorType:  "operator_type",
+			OperName:      "oper_name",
+			DeptName:      "dept_name",
+			OperUrl:       "oper_url",
+			OperIp:        "oper_ip",
+			OperLocation:  "oper_location",
+			OperParam:     "oper_param",
+			JsonResult:    "json_result",
+			Status:        "status",
+			ErrorMsg:      "error_msg",
+			OperTime:      "oper_time",
 		},
 	}
 )
@@ -78,22 +78,22 @@ func NewSysOperLogDao(tenant string) SysOperLogDao {
 		DB:    g.DB(tenant),
 		Table: "sys_oper_log",
 		Columns: sysOperLogColumns{
-			Id:            "id",              
-            Title:         "title",           
-            BusinessType:  "business_type",   
-            Method:        "method",          
-            RequestMethod: "request_method",  
-            OperatorType:  "operator_type",   
-            OperName:      "oper_name",       
-            DeptName:      "dept_name",       
-            OperUrl:       "oper_url",        
-            OperIp:        "oper_ip",         
-            OperLocation:  "oper_location",   
-            OperParam:     "oper_param",      
-            JsonResult:    "json_result",     
-            Status:        "status",          
-            ErrorMsg:      "error_msg",       
-            OperTime:      "oper_time",
+			Id:            "id",
+			Title:         "title",
+			BusinessType:  "business_type",
+			Method:        "method",
+			RequestMethod: "request_method",
+			OperatorType:  "operator_type",
+			OperName:      "oper_name",
+			DeptName:      "dept_name",
+			OperUrl:       "oper_url",
+			OperIp:        "oper_ip",
+			OperLocation:  "oper_location",
+			OperParam:     "oper_param",
+			JsonResult:    "json_result",
+			Status:        "status",
+			ErrorMsg:      "error_msg",
+			OperTime:      "oper_time",
 		},
 	}
 	return dao
@@ -438,4 +438,4 @@ func (d *SysOperLogDao) LockShared() *SysOperLogDao {
 // Unscoped enables/disables the soft deleting feature.
 func (d *SysOperLogDao) Unscoped() *SysOperLogDao {
 	return &SysOperLogDao{M: d.M.Unscoped()}
-}
+}

+ 7 - 7
opms_admin/app/dao/internal/sys_role_menu.go

@@ -26,8 +26,8 @@ type SysRoleMenuDao struct {
 
 // SysRoleMenuColumns defines and stores column names for table sys_role_menu.
 type sysRoleMenuColumns struct {
-	RoleId  string // 角色ID  
-    MenuId  string // 菜单ID
+	RoleId string // 角色ID
+	MenuId string // 菜单ID
 }
 
 var (
@@ -37,8 +37,8 @@ var (
 		DB:    g.DB("default"),
 		Table: "sys_role_menu",
 		Columns: sysRoleMenuColumns{
-			RoleId: "role_id",  
-            MenuId: "menu_id",
+			RoleId: "role_id",
+			MenuId: "menu_id",
 		},
 	}
 )
@@ -50,8 +50,8 @@ func NewSysRoleMenuDao(tenant string) SysRoleMenuDao {
 		DB:    g.DB(tenant),
 		Table: "sys_role_menu",
 		Columns: sysRoleMenuColumns{
-			RoleId: "role_id",  
-            MenuId: "menu_id",
+			RoleId: "role_id",
+			MenuId: "menu_id",
 		},
 	}
 	return dao
@@ -396,4 +396,4 @@ func (d *SysRoleMenuDao) LockShared() *SysRoleMenuDao {
 // Unscoped enables/disables the soft deleting feature.
 func (d *SysRoleMenuDao) Unscoped() *SysRoleMenuDao {
 	return &SysRoleMenuDao{M: d.M.Unscoped()}
-}
+}

+ 3 - 0
opms_admin/app/dao/internal/sys_user.go

@@ -47,6 +47,7 @@ type sysUserColumns struct {
 	UpdatedTime string // 更新时间
 	DeletedTime string // 删除时间
 	Status      string // 帐号状态(10正常20停用)
+	UserSalt    string // 加密盐
 }
 
 var (
@@ -77,6 +78,7 @@ var (
 			UpdatedTime: "updated_time",
 			DeletedTime: "deleted_time",
 			Status:      "status",
+			UserSalt:    "user_salt",
 		},
 	}
 )
@@ -109,6 +111,7 @@ func NewSysUserDao(tenant string) SysUserDao {
 			UpdatedTime: "updated_time",
 			DeletedTime: "deleted_time",
 			Status:      "status",
+			UserSalt:    "user_salt",
 		},
 	}
 	return dao

+ 7 - 7
opms_admin/app/dao/internal/sys_user_post.go

@@ -26,8 +26,8 @@ type SysUserPostDao struct {
 
 // SysUserPostColumns defines and stores column names for table sys_user_post.
 type sysUserPostColumns struct {
-	UserId  string // 用户ID  
-    PostId  string // 岗位ID
+	UserId string // 用户ID
+	PostId string // 岗位ID
 }
 
 var (
@@ -37,8 +37,8 @@ var (
 		DB:    g.DB("default"),
 		Table: "sys_user_post",
 		Columns: sysUserPostColumns{
-			UserId: "user_id",  
-            PostId: "post_id",
+			UserId: "user_id",
+			PostId: "post_id",
 		},
 	}
 )
@@ -50,8 +50,8 @@ func NewSysUserPostDao(tenant string) SysUserPostDao {
 		DB:    g.DB(tenant),
 		Table: "sys_user_post",
 		Columns: sysUserPostColumns{
-			UserId: "user_id",  
-            PostId: "post_id",
+			UserId: "user_id",
+			PostId: "post_id",
 		},
 	}
 	return dao
@@ -396,4 +396,4 @@ func (d *SysUserPostDao) LockShared() *SysUserPostDao {
 // Unscoped enables/disables the soft deleting feature.
 func (d *SysUserPostDao) Unscoped() *SysUserPostDao {
 	return &SysUserPostDao{M: d.M.Unscoped()}
-}
+}

+ 7 - 7
opms_admin/app/dao/internal/sys_user_role.go

@@ -26,8 +26,8 @@ type SysUserRoleDao struct {
 
 // SysUserRoleColumns defines and stores column names for table sys_user_role.
 type sysUserRoleColumns struct {
-	UserId  string // 用户ID  
-    RoleId  string // 角色ID
+	UserId string // 用户ID
+	RoleId string // 角色ID
 }
 
 var (
@@ -37,8 +37,8 @@ var (
 		DB:    g.DB("default"),
 		Table: "sys_user_role",
 		Columns: sysUserRoleColumns{
-			UserId: "user_id",  
-            RoleId: "role_id",
+			UserId: "user_id",
+			RoleId: "role_id",
 		},
 	}
 )
@@ -50,8 +50,8 @@ func NewSysUserRoleDao(tenant string) SysUserRoleDao {
 		DB:    g.DB(tenant),
 		Table: "sys_user_role",
 		Columns: sysUserRoleColumns{
-			UserId: "user_id",  
-            RoleId: "role_id",
+			UserId: "user_id",
+			RoleId: "role_id",
 		},
 	}
 	return dao
@@ -396,4 +396,4 @@ func (d *SysUserRoleDao) LockShared() *SysUserRoleDao {
 // Unscoped enables/disables the soft deleting feature.
 func (d *SysUserRoleDao) Unscoped() *SysUserRoleDao {
 	return &SysUserRoleDao{M: d.M.Unscoped()}
-}
+}

+ 35 - 49
opms_admin/app/handler/auth.go

@@ -6,8 +6,6 @@ import (
 	"dashoo.cn/common_definition/comm_def"
 	"dashoo.cn/micro/app/common/gtoken"
 	"dashoo.cn/opms_libary/micro_srv"
-	"github.com/gogf/gf/errors/gerror"
-
 	"github.com/gogf/gf/encoding/gjson"
 	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/os/glog"
@@ -33,61 +31,49 @@ func init() {
 
 // Login 用户登录验证
 func (e *Auth) Login(ctx context.Context, req *user_def.LoginReq, rsp *comm_def.CommonMsg) error {
-	// 获取租户码
-	tenant, err := micro_srv.GetTenant(ctx)
-	if err != nil {
-		return err
-	}
-	g.Log().Info("Received User.Login request @ " + tenant)
 	// 参数验证
 	if req.UserName == "" || req.Password == "" {
 		return NoParamsErr
 	}
-
-	service, err := user.NewService(tenant)
-	if err != nil {
-		g.Log().Error(err)
-		return gerror.New("系统异常,请重新尝试")
-	}
-
-	userInfo, err := service.Login(ctx, tenant, req.UserName, pridecrypt)
-
-	rsp.Data = userInfo
-	rsp.Code = code
-	rsp.Msg = msg
+	//userService, err := service.NewUserService(ctx)
+	//if err != nil {
+	//	g.Log().Error(err)
+	//	return gerror.New("系统异常,请重新尝试")
+	//}
+	//userInfo, err := userService.Login(ctx, tenant, req.UserName, pridecrypt)
+	//_, err, code, msg := myerrors.CheckError(err)
+	//if err != nil {
+	//	glog.Error(err)
+	//	return err
+	//}
+	//rsp.Data = userInfo
+	//rsp.Code = code
+	//rsp.Msg = msg
 	return nil
 }
 
 // LogOut 退出登录
-//func (e *Auth) LogOut(ctx context.Context, req interface{}, rsp *comm_def.CommonMsg) error {
-//	// 获取租户码
-//	tenant, err := micro_srv.GetTenant(ctx)
-//	if err != nil {
-//		return err
-//	}
-//	g.Log().Info("Received User.LogOut request @ " + tenant)
-//	token, err := micro_srv.GetToken(ctx)
-//	if err != nil {
-//		return err
-//	}
-//	if token == "" {
-//		return NoParamsErr
-//	}
-//	service, err := user.NewService(tenant)
-//	if err != nil {
-//		g.Log().Error(err)
-//		return gerror.New("系统异常,请重新尝试")
-//	}
-//	err = service.LogOut(ctx, token)
-//	_, err, code, msg := myerrors.CheckError(err)
-//	if err != nil {
-//		glog.Error(err)
-//		return err
-//	}
-//	rsp.Code = code
-//	rsp.Msg = msg
-//	return nil
-//}
+func (e *Auth) LogOut(ctx context.Context, req interface{}, rsp *comm_def.CommonMsg) error {
+	if token, err := micro_srv.GetToken(ctx); err != nil {
+		return err
+	} else if token == "" {
+		return NoParamsErr
+	}
+	//userService, err := service.NewUserService(ctx)
+	//if err != nil {
+	//	g.Log().Error(err)
+	//	return gerror.New("系统异常,请重新尝试")
+	//}
+	//err = userService.LogOut(ctx, token)
+	//_, err, code, msg := myerrors.CheckError(err)
+	//if err != nil {
+	//	glog.Error(err)
+	//	return err
+	//}
+	//rsp.Code = code
+	//rsp.Msg = msg
+	return nil
+}
 
 func (e *Auth) GetToken(ctx context.Context, req *auth.Request, rsp *auth.Response) (err error) {
 	glog.Info("Received Auth.GetToken request, UserKey:", req.UserKey, " @ ", req.Tenant)

+ 135 - 0
opms_admin/app/handler/menu.go

@@ -0,0 +1,135 @@
+package handler
+
+import (
+	"context"
+	"dashoo.cn/common_definition/admin/menu_def"
+	"dashoo.cn/common_definition/comm_def"
+	"dashoo.cn/micro/app/model"
+	"dashoo.cn/micro/app/service"
+	"dashoo.cn/opms_libary/myerrors"
+	"errors"
+	"github.com/gogf/gf/errors/gerror"
+	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/util/gconv"
+	"github.com/gogf/gf/util/gvalid"
+)
+
+type Menu struct{}
+
+// GetList 获取列表
+func (o *Menu) GetList(ctx context.Context, req *menu_def.SelectReq, rsp *comm_def.CommonMsg) error {
+	menuService, err := service.NewMenuService(ctx)
+	if err != nil {
+		g.Log().Error(err)
+		return errors.New("系统异常,请重新尝试")
+	}
+	list, err := menuService.GetList(req)
+	_, _, rsp.Code, rsp.Msg = myerrors.CheckError(err)
+	rsp.Data = list
+	return nil
+}
+
+// GetEntityById 详情
+func (o *Menu) GetEntityById(ctx context.Context, req *comm_def.IdReq, rsp *comm_def.CommonMsg) error {
+	// 参数校验
+	if req.Id == 0 {
+		return NoParamsErr
+	}
+	menuService, err := service.NewMenuService(ctx)
+	if err != nil {
+		g.Log().Error(err)
+		return gerror.New("系统异常,请重新尝试")
+	}
+	entity, err := menuService.GetEntity(req.Id)
+	if err != nil {
+		g.Log().Error(err)
+		return err
+	}
+	_, _, rsp.Code, rsp.Msg = myerrors.CheckError(err)
+	rsp.Data = entity
+	return nil
+}
+
+// Add 添加
+func (o *Menu) Add(ctx context.Context, req *model.SysMenuReq, rsp *comm_def.CommonMsg) error {
+	// 检查请求参数
+	if v := gvalid.CheckStruct(ctx, req, nil); v != nil {
+		g.Log().Error(v)
+		return v
+	}
+	menuService, err := service.NewMenuService(ctx)
+	if err != nil {
+		g.Log().Error(err)
+		return gerror.New("系统异常,请重新尝试")
+	}
+	id, err := menuService.Add(ctx, req)
+	_, _, rsp.Code, rsp.Msg = myerrors.CheckError(err)
+	rsp.Data = gconv.String(id)
+	return nil
+}
+
+// UpdateById 编辑
+func (o *Menu) UpdateById(ctx context.Context, req *model.SysMenuReq, rsp *comm_def.CommonMsg) error {
+	// 参数校验
+	if req.Id == 0 {
+		return NoParamsErr
+	}
+	// 检查请求参数
+	if v := gvalid.CheckStruct(ctx, req, nil); v != nil {
+		g.Log().Error(v)
+		return v
+	}
+
+	menuService, err := service.NewMenuService(ctx)
+	if err != nil {
+		g.Log().Error(err)
+		return gerror.New("系统异常,请重新尝试")
+	}
+
+	err = menuService.UpdateById(ctx, req)
+	_, _, rsp.Code, rsp.Msg = myerrors.CheckError(err)
+	return nil
+}
+
+// DeleteById 删除菜单
+func (o *Menu) DeleteById(ctx context.Context, req *comm_def.IdReq, rsp *comm_def.CommonMsg) error {
+	menuService, err := service.NewMenuService(ctx)
+	if err != nil {
+		g.Log().Error(err)
+		return gerror.New("系统异常,请重新尝试")
+	}
+
+	err = menuService.Delete(int(req.Id))
+	_, _, rsp.Code, rsp.Msg = myerrors.CheckError(err)
+	return nil
+}
+
+// GetRoleMenuIds 根据角色获取菜单
+//func (o *Menu) GetRoleMenuIds(ctx context.Context, req *menu_def.RoleIdReq, rsp *comm_def.CommonMsg) error {
+//	service, err := role_menu.NewService(tenant)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return gerror.New("系统异常,请重新尝试")
+//	}
+//
+//	entity, err := service.GetRoleMenuIds(req.RoleId)
+//	_, err, code, msg := myerrors.CheckError(err)
+//	rsp.Code = code
+//	rsp.Msg = msg
+//	rsp.Data = entity
+//
+//	return nil
+//}
+
+// GetMenuTree 获取菜单树
+func (o *Menu) GetMenuTree(ctx context.Context, nullParams interface{}, rsp *comm_def.CommonMsg) error {
+	menuService, err := service.NewMenuService(ctx)
+	if err != nil {
+		g.Log().Error(err)
+		return gerror.New("系统异常,请重新尝试")
+	}
+	list, err := menuService.GetMenuTree()
+	_, _, rsp.Code, rsp.Msg = myerrors.CheckError(err)
+	rsp.Data = list
+	return nil
+}

+ 558 - 0
opms_admin/app/handler/user.go

@@ -0,0 +1,558 @@
+package handler
+
+import (
+	"context"
+	"dashoo.cn/common_definition/admin/user_def"
+	"dashoo.cn/micro/app/model"
+	"dashoo.cn/micro/app/service"
+	"dashoo.cn/opms_libary/myerrors"
+	"dashoo.cn/opms_libary/utils"
+	"github.com/gogf/gf/errors/gerror"
+	"github.com/gogf/gf/util/gvalid"
+
+	"dashoo.cn/common_definition/comm_def"
+
+	"github.com/gogf/gf/frame/g"
+)
+
+type User struct{}
+
+// GetList 获取用户列表
+func (e *User) GetList(ctx context.Context, req *model.SysUserSearchReq, rsp *comm_def.CommonMsg) error {
+	// 参数校验
+	if req.PageSize == 0 {
+		req.PageSize = DefaultPageNum
+	}
+	userService, err := service.NewUserService(ctx)
+	if err != nil {
+		g.Log().Error(err)
+		return err
+	}
+
+	total, list, err := userService.GetUserList(req)
+	_, err, rsp.Code, rsp.Msg = myerrors.CheckError(err)
+	if err != nil {
+		g.Log().Error(err)
+		return err
+	}
+	rsp.Data = g.Map{"list": list, "total": total}
+	return nil
+}
+
+// Add 添加用户
+func (e *User) Add(ctx context.Context, req *model.AddUserReq, rsp *comm_def.CommonMsg) error {
+	// 参数校验
+	if err := gvalid.CheckStruct(ctx, req, nil); err != nil {
+		return err
+	}
+	//req.RoleIds = utils.IntArrayToIdsString(req.RoleArray)
+	//req.PostIds = utils.IntArrayToIdsString(req.PostArray)
+	userService, err := service.NewUserService(ctx)
+	if err != nil {
+		g.Log().Error(err)
+		return err
+	}
+	//userinfo, err := micro_srv.GetUserInfo(ctx)
+	//if err != nil {
+	//	return err
+	//}
+	err = userService.AddUser(req)
+	_, err, rsp.Code, rsp.Msg = myerrors.CheckError(err)
+	if err != nil {
+		g.Log().Error(err)
+		return err
+	}
+	return nil
+}
+
+// Update 更新用户
+func (e *User) Update(ctx context.Context, req *user_def.UpdateReq, rsp *comm_def.CommonMsg) error {
+	// 参数校验
+	if req.Id == 0 {
+		return NoParamsErr
+	}
+	if err := gvalid.CheckStruct(ctx, req, nil); err != nil {
+		return err
+	}
+	req.RoleIds = utils.IntArrayToIdsString(req.RoleArray)
+	req.PostIds = utils.IntArrayToIdsString(req.PostArray)
+	//userService, err := service.NewUserService(ctx)
+	//if err != nil {
+	//	g.Log().Error(err)
+	//	return err
+	//}
+	//// 获取用户信息
+	//userInfo, err := micro_srv.GetUserInfo(ctx)
+	//if err != nil {
+	//	return err
+	//}
+	//err = userService.EditUser(userInfo, req)
+	//_, err, rsp.Code, rsp.Msg = myerrors.CheckError(err)
+	//if err != nil {
+	//	g.Log().Error(err)
+	//	return err
+	//}
+	return nil
+}
+
+//// GetAddOrUpdateEntity 获取用户实体信息
+//func (e *User) GetAddOrUpdateEntity(ctx context.Context, req *comm_def.IdReq, rsp *comm_def.CommonMsg) error {
+//	// 获取租户码
+//	tenant, err := micro_srv.GetTenant(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	g.Log().Info("Received User.GetAddOrUpdateEntity request @ " + tenant)
+//	service, err := user.NewService(tenant)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return gerror.New("系统异常,请重新尝试")
+//	}
+//
+//	data, err := service.GetEntity(req.Id)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return err
+//	}
+//	// 获取用户权限 角色
+//	permissionService, err := permission.NewService(tenant)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return gerror.New("系统异常,请重新尝试")
+//	}
+//	userRoles, err := permissionService.GetRoleIdsByUser(gconv.Int32(req.Id))
+//	if err != nil {
+//		g.Log().Error(err)
+//		return err
+//	}
+//	userPositions, err := permissionService.GetPositionIdsByUser(gconv.Int32(req.Id))
+//	_, err, code, msg := myerrors.CheckError(err)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return err
+//	}
+//	rsp.Code = code
+//	rsp.Msg = msg
+//
+//	rsp.Data = g.Map{
+//		"entity":   data,
+//		"role_ids": convert.ToStringArray(userRoles),
+//		"post_ids": convert.ToStringArray(userPositions),
+//	}
+//	return nil
+//}
+//
+//// GetEntityByUuId 根据UUID获取用户实体信息
+//func (e *User) GetEntityByUuId(ctx context.Context, req *user_def.UuIdReq, rsp *comm_def.CommonMsg) error {
+//	// 获取租户码
+//	tenant, err := micro_srv.GetTenant(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	g.Log().Info("Received User.GetEntityByUuId request @ " + tenant)
+//	// 参数校验
+//	if req.Uuid == "" {
+//		return NoParamsErr
+//	}
+//	service, err := user.NewService(tenant)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return gerror.New("系统异常,请重新尝试")
+//	}
+//	data, err := service.GetEntityByUuId(req.Uuid)
+//	_, err, code, msg := myerrors.CheckError(err)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return err
+//	}
+//	rsp.Code = code
+//	rsp.Msg = msg
+//	rsp.Data = data
+//	return nil
+//}
+
+// DeleteUserByIds 删除 支持批量删除
+func (e *User) DeleteUserByIds(ctx context.Context, req *comm_def.IdsReq, rsp *comm_def.CommonMsg) error {
+	// 参数校验
+	if len(req.Ids) == 0 {
+		return NoParamsErr
+	}
+	userService, err := service.NewUserService(ctx)
+	if err != nil {
+		g.Log().Error(err)
+		return gerror.New("系统异常,请重新尝试")
+	}
+
+	err = userService.DeleteUserByIds(ctx, req.Ids)
+	_, err, rsp.Code, rsp.Msg = myerrors.CheckError(err)
+	if err != nil {
+		g.Log().Error(err)
+		return err
+	}
+	return nil
+}
+
+//// ResetPassword 密码重置(管理员进行操作)
+//func (e *User) ResetPassword(ctx context.Context, req *user_def.ResetPwdReq, rsp *comm_def.CommonMsg) error {
+//	// 获取租户码
+//	tenant, err := micro_srv.GetTenant(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	g.Log().Info("Received User.ResetPassword request @ " + tenant)
+//	if req.Id == 0 || req.Password == "" {
+//		return NoParamsErr
+//	}
+//	if err = gvalid.CheckStruct(ctx, req, nil); err != nil {
+//		return err
+//	}
+//	// todo:校验用户是否有修改权限
+//	service, err := user.NewService(tenant)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return gerror.New("系统异常,请重新尝试")
+//	}
+//	userInfo, err := micro_srv.GetUserInfo(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	err = service.ResetPassword(&userInfo, req.Id, req.Password)
+//	_, err, code, msg := myerrors.CheckError(err)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return err
+//	}
+//	rsp.Code = code
+//	rsp.Msg = msg
+//	return nil
+//}
+//
+//// SetStatus 设置用户状态
+//func (e *User) SetStatus(ctx context.Context, req *user_def.SetStatusReq, rsp *comm_def.CommonMsg) error {
+//	// 获取租户码
+//	tenant, err := micro_srv.GetTenant(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	g.Log().Info("Received User.SetStatus request @ " + tenant)
+//	// 参数校验
+//	if req.Id == 0 {
+//		return NoParamsErr
+//	}
+//	service, err := user.NewService(tenant)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return gerror.New("系统异常,请重新尝试")
+//	}
+//	userInfo, err := micro_srv.GetUserInfo(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	err = service.SetStatus(&userInfo, req.Id, req.Enabled)
+//	_, err, code, msg := myerrors.CheckError(err)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return err
+//	}
+//	rsp.Code = code
+//	rsp.Msg = msg
+//	return nil
+//}
+//
+//// GetUserBelongDept 获取部门下所属用户
+//func (e *User) GetUserBelongDept(ctx context.Context, req *user_def.DeptIdReq, rsp *comm_def.CommonMsg) error {
+//	// 获取租户码
+//	tenant, err := micro_srv.GetTenant(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	g.Log().Info("Received User.GetUserBelongDept request @ " + tenant)
+//	// 参数校验
+//	if req.DeptId == 0 {
+//		return NoParamsErr
+//	}
+//	service, err := user.NewService(tenant)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return gerror.New("系统异常,请重新尝试")
+//	}
+//
+//	list, err := service.GetUserBelongDept(req.DeptId)
+//	_, err, code, msg := myerrors.CheckError(err)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return err
+//	}
+//	rsp.Code = code
+//	rsp.Msg = msg
+//	rsp.Data = list
+//	return nil
+//}
+//
+//// GetIdByUuid 根据uuid 获取用户id
+//func (e *User) GetIdByUuid(ctx context.Context, req *user_def.UuIdReq, rsp *comm_def.CommonMsg) error {
+//	// 获取租户码
+//	tenant, err := micro_srv.GetTenant(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	g.Log().Info("Received User.GetIdByUuid request @ " + tenant)
+//	// 参数校验
+//	if req.Uuid == "" {
+//		return NoParamsErr
+//	}
+//	service, err := user.NewService(tenant)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return gerror.New("系统异常,请重新尝试")
+//	}
+//
+//	userId, err := service.GetIdByUuid(req.Uuid)
+//	_, err, code, msg := myerrors.CheckError(err)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return err
+//	}
+//	rsp.Code = code
+//	rsp.Msg = msg
+//	rsp.Data = userId
+//	return nil
+//}
+//
+//// GetDictList 获取用户列表字典项(返回字典数据形式,一般用来绑定用户的下拉列表)
+//func (e *User) GetDictList(ctx context.Context, req *user_def.DictSelectReq, rsp *comm_def.CommonMsg) error {
+//	// 获取租户码
+//	tenant, err := micro_srv.GetTenant(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	g.Log().Info("Received User.GetDictList request @ " + tenant)
+//
+//	service, err := user.NewService(tenant)
+//	if flag, err, _, _ := myerrors.CheckError(err); flag {
+//		return err
+//	}
+//
+//	list, err := service.GetDict(req)
+//	_, err, code, msg := myerrors.CheckError(err)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return err
+//	}
+//	rsp.Code = code
+//	rsp.Msg = msg
+//	rsp.Data = list
+//	return nil
+//}
+//
+//// GetUsersDictByDepartment 获取当前部门下用户信息列表(返回字典数据形式,一般用来绑定用户的下拉列表)
+//func (e *User) GetUsersDictByDepartment(ctx context.Context, req *user_def.DeptIdReq,
+//	rsp *comm_def.CommonMsg) error {
+//	// 获取租户码
+//	tenant, err := micro_srv.GetTenant(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	g.Log().Info("Received User.GetUsersDictByDepartment request @ " + tenant)
+//	service, err := user.NewService(tenant)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return gerror.New("系统异常,请重新尝试")
+//	}
+//	list, err := service.GetUsersDictByDepartment(req.DeptId)
+//	_, err, code, msg := myerrors.CheckError(err)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return err
+//	}
+//	rsp.Code = code
+//	rsp.Msg = msg
+//	rsp.Data = list
+//	return nil
+//}
+//
+//// GetProfile 获取用户信息
+//func (e *User) GetProfile(ctx context.Context, numParams interface{}, rsp *comm_def.CommonMsg) error {
+//	// 获取租户码
+//	tenant, err := micro_srv.GetTenant(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	g.Log().Info("Received User.GetProfile request @ " + tenant)
+//
+//	service, err := user.NewService(tenant)
+//	if flag, err, _, _ := myerrors.CheckError(err); flag {
+//		return err
+//	}
+//	userInfo, err := micro_srv.GetUserInfo(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	profile, err := service.GetProfile(int64(userInfo.Id))
+//	_, err, code, msg := myerrors.CheckError(err)
+//	if err != nil {
+//		glog.Error(err)
+//		return err
+//	}
+//	rsp.Code = code
+//	rsp.Msg = msg
+//	rsp.Data = profile
+//	return nil
+//}
+//
+//// UpdateProfile 更新Profile
+//func (e *User) UpdateProfile(ctx context.Context, req *user_def.EditProfileEntity, rsp *comm_def.CommonMsg) error {
+//	// 获取租户码
+//	tenant, err := micro_srv.GetTenant(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	g.Log().Info("Received User.UpdateProfile request @ " + tenant)
+//	if req.Id == 0 {
+//		return NoParamsErr
+//	}
+//	validErr := gvalid.CheckStruct(ctx, req, nil)
+//	if validErr != nil {
+//		return validErr.Current()
+//	}
+//	service, err := user.NewService(tenant)
+//	if flag, err, _, _ := myerrors.CheckError(err); flag {
+//		return err
+//	}
+//	userInfo, err := micro_srv.GetUserInfo(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	err = service.UpdateProfile(&userInfo, req)
+//	_, err, code, msg := myerrors.CheckError(err)
+//	if err != nil {
+//		glog.Error(err)
+//		return err
+//	}
+//	rsp.Code = code
+//	rsp.Msg = msg
+//	return nil
+//}
+//
+//// SetAvatar 设置用户头像
+//func (e *User) SetAvatar(ctx context.Context, req *user_def.AvatarReq, rsp *comm_def.CommonMsg) error {
+//	// 获取租户码
+//	tenant, err := micro_srv.GetTenant(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	g.Log().Info("Received User.SetAvatar request @ " + tenant)
+//	if req.FileUrl == "" {
+//		return NoParamsErr
+//	}
+//	service, err := user.NewService(tenant)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return gerror.New("系统异常,请重新尝试")
+//	}
+//	userInfo, err := micro_srv.GetUserInfo(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	err = service.SetAvatar(&userInfo, req.FileUrl)
+//	_, err, code, msg := myerrors.CheckError(err)
+//	if err != nil {
+//		glog.Error(err)
+//		return err
+//	}
+//	rsp.Code = code
+//	rsp.Msg = msg
+//	return nil
+//}
+//
+//// ChangePassword 用户修改密码
+//func (e *User) ChangePassword(ctx context.Context, req *user_def.PWDReq, rsp *comm_def.CommonMsg) error {
+//	// 获取租户码
+//	tenant, err := micro_srv.GetTenant(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	g.Log().Info("Received User.ChangePassword request @ " + tenant)
+//	gvalidErr := gvalid.CheckStruct(ctx, req, nil)
+//	if gvalidErr != nil {
+//		return gvalidErr.Current()
+//	}
+//	service, err := user.NewService(tenant)
+//	if flag, err, _, _ := myerrors.CheckError(err); flag {
+//		return err
+//	}
+//	userInfo, err := micro_srv.GetUserInfo(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	err = service.ChangePassword(&userInfo, req.OldPassword, req.NewPassword)
+//	_, err, code, msg := myerrors.CheckError(err)
+//	rsp.Code = code
+//	rsp.Msg = msg
+//	return err
+//}
+//
+//// GetUserByUserName 根据用户名获取用户信息
+//func (e *User) GetUserByUserName(ctx context.Context, req *user_def.UserNameReq, rsp *comm_def.CommonMsg) error {
+//	// 获取租户码
+//	tenant, err := micro_srv.GetTenant(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	g.Log().Info("Received User.GetUserByUserName request @ " + tenant)
+//	if req.UserName == "" {
+//
+//	}
+//	service, err := user.NewService(tenant)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return gerror.New("系统异常,请重新尝试")
+//	}
+//
+//	userEntity, err := service.GetUserByUserName(req.UserName)
+//	_, err, code, msg := myerrors.CheckError(err)
+//	rsp.Code = code
+//	rsp.Msg = msg
+//	rsp.Data = userEntity
+//	return nil
+//}
+//
+//func (e *User) SendResetPasswordEmail(ctx context.Context, req *user_def.UserNameReq, rsp *comm_def.CommonMsg) error {
+//	tenant, err := micro_srv.GetTenant(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	service, err := user.NewService(tenant)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return gerror.New("系统异常,请重新尝试")
+//	}
+//	email, expired, err := service.SendResetPasswordEmail(req)
+//	_, err, code, msg := myerrors.CheckError(err)
+//	rsp.Code = code
+//	rsp.Msg = msg
+//	if err == nil {
+//		rsp.Data = map[string]interface{}{
+//			"email":   email,
+//			"expired": expired,
+//		}
+//	}
+//	return nil
+//}
+//
+//func (e *User) ResetPasswordFromEmail(ctx context.Context, req *user.ResetPasswordFromEmailReq, rsp *comm_def.CommonMsg) error {
+//	tenant, err := micro_srv.GetTenant(ctx)
+//	if err != nil {
+//		return err
+//	}
+//	service, err := user.NewService(tenant)
+//	if err != nil {
+//		g.Log().Error(err)
+//		return gerror.New("系统异常,请重新尝试")
+//	}
+//	err = service.ResetPasswordFromEmail(ctx, req)
+//	_, err, code, msg := myerrors.CheckError(err)
+//	rsp.Code = code
+//	rsp.Msg = msg
+//	return nil
+//}

+ 4 - 5
opms_admin/app/model/context.go

@@ -1,7 +1,6 @@
 package model
 
 import (
-	"dashoo.cn/micro/app/dao"
 	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/net/ghttp"
 )
@@ -36,9 +35,9 @@ func (ctxUser *CtxUser) GetUserId() (id uint64) {
 
 // GetDept 获取登录用户所属部门
 func (ctxUser *CtxUser) GetDept() (err error, dept *SysDept) {
-	err = g.DB().Model(dao.SysDept.Table).Fields(dao.SysDept.Columns.Id, dao.SysDept.Columns.DeptName).WherePri(ctxUser.DeptId).Scan(&dept)
-	if dept == nil {
-		dept = &SysDept{}
-	}
+	//err = g.DB().Model(dao.SysDept.Table).Fields(dao.SysDept.Columns.Id, dao.SysDept.Columns.DeptName).WherePri(ctxUser.DeptId).Scan(&dept)
+	//if dept == nil {
+	//	dept = &SysDept{}
+	//}
 	return
 }

+ 15 - 15
opms_admin/app/model/internal/sys_config.go

@@ -5,22 +5,22 @@
 package internal
 
 import (
-    "github.com/gogf/gf/os/gtime"
+	"github.com/gogf/gf/os/gtime"
 )
 
 // SysConfig is the golang structure for table sys_config.
 type SysConfig struct {
-    Id          int         `orm:"id,primary"   json:"id"`          // 参数主键              
-    ConfigName  string      `orm:"config_name"  json:"configName"`  // 参数名称              
-    ConfigKey   string      `orm:"config_key"   json:"configKey"`   // 参数键名              
-    ConfigValue string      `orm:"config_value" json:"configValue"` // 参数键值              
-    ConfigType  string      `orm:"config_type"  json:"configType"`  // 系统内置(10是20否)  
-    Remark      string      `orm:"remark"       json:"remark"`      // 备注                  
-    CreatedBy   int         `orm:"created_by"   json:"createdBy"`   // 创建者                
-    CreatedName string      `orm:"created_name" json:"createdName"` // 创建人                
-    CreatedTime *gtime.Time `orm:"created_time" json:"createdTime"` // 创建时间              
-    UpdatedBy   int         `orm:"updated_by"   json:"updatedBy"`   // 更新者                
-    UpdatedName string      `orm:"updated_name" json:"updatedName"` // 更新人                
-    UpdatedTime *gtime.Time `orm:"updated_time" json:"updatedTime"` // 更新时间              
-    DeletedTime *gtime.Time `orm:"deleted_time" json:"deletedTime"` // 删除时间              
-}
+	Id          int         `orm:"id,primary"   json:"id"`          // 参数主键
+	ConfigName  string      `orm:"config_name"  json:"configName"`  // 参数名称
+	ConfigKey   string      `orm:"config_key"   json:"configKey"`   // 参数键名
+	ConfigValue string      `orm:"config_value" json:"configValue"` // 参数键值
+	ConfigType  string      `orm:"config_type"  json:"configType"`  // 系统内置(10是20否)
+	Remark      string      `orm:"remark"       json:"remark"`      // 备注
+	CreatedBy   int         `orm:"created_by"   json:"createdBy"`   // 创建者
+	CreatedName string      `orm:"created_name" json:"createdName"` // 创建人
+	CreatedTime *gtime.Time `orm:"created_time" json:"createdTime"` // 创建时间
+	UpdatedBy   int         `orm:"updated_by"   json:"updatedBy"`   // 更新者
+	UpdatedName string      `orm:"updated_name" json:"updatedName"` // 更新人
+	UpdatedTime *gtime.Time `orm:"updated_time" json:"updatedTime"` // 更新时间
+	DeletedTime *gtime.Time `orm:"deleted_time" json:"deletedTime"` // 删除时间
+}

+ 14 - 14
opms_admin/app/model/internal/sys_dict_type.go

@@ -5,21 +5,21 @@
 package internal
 
 import (
-    "github.com/gogf/gf/os/gtime"
+	"github.com/gogf/gf/os/gtime"
 )
 
 // SysDictType is the golang structure for table sys_dict_type.
 type SysDictType struct {
-    Id          int         `orm:"id,primary"       json:"id"`          // 字典主键              
-    DictName    string      `orm:"dict_name"        json:"dictName"`    // 字典名称              
-    DictType    string      `orm:"dict_type,unique" json:"dictType"`    // 字典类型              
-    Status      string      `orm:"status"           json:"status"`      // 状态(10正常20停用)  
-    Remark      string      `orm:"remark"           json:"remark"`      // 备注                  
-    CreatedBy   int         `orm:"created_by"       json:"createdBy"`   // 创建者                
-    CreatedName string      `orm:"created_name"     json:"createdName"` // 创建人                
-    CreatedTime *gtime.Time `orm:"created_time"     json:"createdTime"` // 创建时间              
-    UpdatedBy   int         `orm:"updated_by"       json:"updatedBy"`   // 更新者                
-    UpdatedName string      `orm:"updated_name"     json:"updatedName"` // 更新人                
-    UpdatedTime *gtime.Time `orm:"updated_time"     json:"updatedTime"` // 更新时间              
-    DeletedTime *gtime.Time `orm:"deleted_time"     json:"deletedTime"` // 删除时间              
-}
+	Id          int         `orm:"id,primary"       json:"id"`          // 字典主键
+	DictName    string      `orm:"dict_name"        json:"dictName"`    // 字典名称
+	DictType    string      `orm:"dict_type,unique" json:"dictType"`    // 字典类型
+	Status      string      `orm:"status"           json:"status"`      // 状态(10正常20停用)
+	Remark      string      `orm:"remark"           json:"remark"`      // 备注
+	CreatedBy   int         `orm:"created_by"       json:"createdBy"`   // 创建者
+	CreatedName string      `orm:"created_name"     json:"createdName"` // 创建人
+	CreatedTime *gtime.Time `orm:"created_time"     json:"createdTime"` // 创建时间
+	UpdatedBy   int         `orm:"updated_by"       json:"updatedBy"`   // 更新者
+	UpdatedName string      `orm:"updated_name"     json:"updatedName"` // 更新人
+	UpdatedTime *gtime.Time `orm:"updated_time"     json:"updatedTime"` // 更新时间
+	DeletedTime *gtime.Time `orm:"deleted_time"     json:"deletedTime"` // 删除时间
+}

+ 11 - 11
opms_admin/app/model/internal/sys_login.go

@@ -5,18 +5,18 @@
 package internal
 
 import (
-    "github.com/gogf/gf/os/gtime"
+	"github.com/gogf/gf/os/gtime"
 )
 
 // SysLogin is the golang structure for table sys_login.
 type SysLogin struct {
-    InfoId        int         `orm:"info_id,primary" json:"infoId"`        // 访问ID                    
-    UserName      string      `orm:"user_name"       json:"userName"`      // 用户账号                  
-    Ipaddr        string      `orm:"ipaddr"          json:"ipaddr"`        // 登录IP地址                
-    LoginLocation string      `orm:"login_location"  json:"loginLocation"` // 登录地点                  
-    Browser       string      `orm:"browser"         json:"browser"`       // 浏览器类型                
-    Os            string      `orm:"os"              json:"os"`            // 操作系统                  
-    Status        string      `orm:"status"          json:"status"`        // 登录状态(10成功20失败)  
-    Msg           string      `orm:"msg"             json:"msg"`           // 提示消息                  
-    LoginTime     *gtime.Time `orm:"login_time"      json:"loginTime"`     // 访问时间                  
-}
+	InfoId        int         `orm:"info_id,primary" json:"infoId"`        // 访问ID
+	UserName      string      `orm:"user_name"       json:"userName"`      // 用户账号
+	Ipaddr        string      `orm:"ipaddr"          json:"ipaddr"`        // 登录IP地址
+	LoginLocation string      `orm:"login_location"  json:"loginLocation"` // 登录地点
+	Browser       string      `orm:"browser"         json:"browser"`       // 浏览器类型
+	Os            string      `orm:"os"              json:"os"`            // 操作系统
+	Status        string      `orm:"status"          json:"status"`        // 登录状态(10成功20失败)
+	Msg           string      `orm:"msg"             json:"msg"`           // 提示消息
+	LoginTime     *gtime.Time `orm:"login_time"      json:"loginTime"`     // 访问时间
+}

+ 1 - 1
opms_admin/app/model/internal/sys_menu.go

@@ -19,7 +19,7 @@ type SysMenu struct {
 	IsFrame     int         `orm:"is_frame"     json:"isFrame"`     // 是否为外链(10是20否)
 	IsCache     int         `orm:"is_cache"     json:"isCache"`     // 是否缓存(10缓存20不缓存)
 	MenuType    string      `orm:"menu_type"    json:"menuType"`    // 菜单类型(M目录C菜单 F按钮)
-	Visible     string      `orm:"visible"      json:"visible"`     // 菜单状态(10显示20隐藏)
+	Visible     string      `orm:"visible"      json:"visible"`     // 显示状态(10显示20隐藏)
 	Status      string      `orm:"status"       json:"status"`      // 菜单状态(10正常20停用)
 	Perms       string      `orm:"perms"        json:"perms"`       // 权限标识
 	Icon        string      `orm:"icon"         json:"icon"`        // 菜单图标

+ 15 - 15
opms_admin/app/model/internal/sys_notice.go

@@ -5,22 +5,22 @@
 package internal
 
 import (
-    "github.com/gogf/gf/os/gtime"
+	"github.com/gogf/gf/os/gtime"
 )
 
 // SysNotice is the golang structure for table sys_notice.
 type SysNotice struct {
-    Id            int         `orm:"id,primary"     json:"id"`            // 公告ID                    
-    NoticeTitle   string      `orm:"notice_title"   json:"noticeTitle"`   // 公告标题                  
-    NoticeType    string      `orm:"notice_type"    json:"noticeType"`    // 公告类型(10通知20公告)  
-    NoticeContent string      `orm:"notice_content" json:"noticeContent"` // 公告内容                  
-    Status        string      `orm:"status"         json:"status"`        // 公告状态(10正常20关闭)  
-    Remark        string      `orm:"remark"         json:"remark"`        // 备注                      
-    CreatedBy     int         `orm:"created_by"     json:"createdBy"`     // 创建者                    
-    CreatedName   string      `orm:"created_name"   json:"createdName"`   // 创建人                    
-    CreatedTime   *gtime.Time `orm:"created_time"   json:"createdTime"`   // 创建时间                  
-    UpdatedBy     int         `orm:"updated_by"     json:"updatedBy"`     // 更新者                    
-    UpdatedName   string      `orm:"updated_name"   json:"updatedName"`   // 更新人                    
-    UpdatedTime   *gtime.Time `orm:"updated_time"   json:"updatedTime"`   // 更新时间                  
-    DeletedTime   *gtime.Time `orm:"deleted_time"   json:"deletedTime"`   // 删除时间                  
-}
+	Id            int         `orm:"id,primary"     json:"id"`            // 公告ID
+	NoticeTitle   string      `orm:"notice_title"   json:"noticeTitle"`   // 公告标题
+	NoticeType    string      `orm:"notice_type"    json:"noticeType"`    // 公告类型(10通知20公告)
+	NoticeContent string      `orm:"notice_content" json:"noticeContent"` // 公告内容
+	Status        string      `orm:"status"         json:"status"`        // 公告状态(10正常20关闭)
+	Remark        string      `orm:"remark"         json:"remark"`        // 备注
+	CreatedBy     int         `orm:"created_by"     json:"createdBy"`     // 创建者
+	CreatedName   string      `orm:"created_name"   json:"createdName"`   // 创建人
+	CreatedTime   *gtime.Time `orm:"created_time"   json:"createdTime"`   // 创建时间
+	UpdatedBy     int         `orm:"updated_by"     json:"updatedBy"`     // 更新者
+	UpdatedName   string      `orm:"updated_name"   json:"updatedName"`   // 更新人
+	UpdatedTime   *gtime.Time `orm:"updated_time"   json:"updatedTime"`   // 更新时间
+	DeletedTime   *gtime.Time `orm:"deleted_time"   json:"deletedTime"`   // 删除时间
+}

+ 18 - 18
opms_admin/app/model/internal/sys_oper_log.go

@@ -5,25 +5,25 @@
 package internal
 
 import (
-    "github.com/gogf/gf/os/gtime"
+	"github.com/gogf/gf/os/gtime"
 )
 
 // SysOperLog is the golang structure for table sys_oper_log.
 type SysOperLog struct {
-    Id            int         `orm:"id,primary"     json:"id"`            // 日志主键                                   
-    Title         string      `orm:"title"          json:"title"`         // 模块标题                                   
-    BusinessType  int         `orm:"business_type"  json:"businessType"`  // 业务类型(10新增 20修改 30删除40其他)     
-    Method        string      `orm:"method"         json:"method"`        // 方法名称                                   
-    RequestMethod string      `orm:"request_method" json:"requestMethod"` // 请求方式                                   
-    OperatorType  string      `orm:"operator_type"  json:"operatorType"`  // 操作类别(10后台用户 20手机端用户30其它)  
-    OperName      string      `orm:"oper_name"      json:"operName"`      // 操作人员                                   
-    DeptName      string      `orm:"dept_name"      json:"deptName"`      // 部门名称                                   
-    OperUrl       string      `orm:"oper_url"       json:"operUrl"`       // 请求URL                                    
-    OperIp        string      `orm:"oper_ip"        json:"operIp"`        // 主机地址                                   
-    OperLocation  string      `orm:"oper_location"  json:"operLocation"`  // 操作地点                                   
-    OperParam     string      `orm:"oper_param"     json:"operParam"`     // 请求参数                                   
-    JsonResult    string      `orm:"json_result"    json:"jsonResult"`    // 返回参数                                   
-    Status        int         `orm:"status"         json:"status"`        // 操作状态(10正常20异常)                   
-    ErrorMsg      string      `orm:"error_msg"      json:"errorMsg"`      // 错误消息                                   
-    OperTime      *gtime.Time `orm:"oper_time"      json:"operTime"`      // 操作时间                                   
-}
+	Id            int         `orm:"id,primary"     json:"id"`            // 日志主键
+	Title         string      `orm:"title"          json:"title"`         // 模块标题
+	BusinessType  int         `orm:"business_type"  json:"businessType"`  // 业务类型(10新增 20修改 30删除40其他)
+	Method        string      `orm:"method"         json:"method"`        // 方法名称
+	RequestMethod string      `orm:"request_method" json:"requestMethod"` // 请求方式
+	OperatorType  string      `orm:"operator_type"  json:"operatorType"`  // 操作类别(10后台用户 20手机端用户30其它)
+	OperName      string      `orm:"oper_name"      json:"operName"`      // 操作人员
+	DeptName      string      `orm:"dept_name"      json:"deptName"`      // 部门名称
+	OperUrl       string      `orm:"oper_url"       json:"operUrl"`       // 请求URL
+	OperIp        string      `orm:"oper_ip"        json:"operIp"`        // 主机地址
+	OperLocation  string      `orm:"oper_location"  json:"operLocation"`  // 操作地点
+	OperParam     string      `orm:"oper_param"     json:"operParam"`     // 请求参数
+	JsonResult    string      `orm:"json_result"    json:"jsonResult"`    // 返回参数
+	Status        int         `orm:"status"         json:"status"`        // 操作状态(10正常20异常)
+	ErrorMsg      string      `orm:"error_msg"      json:"errorMsg"`      // 错误消息
+	OperTime      *gtime.Time `orm:"oper_time"      json:"operTime"`      // 操作时间
+}

+ 3 - 5
opms_admin/app/model/internal/sys_role_menu.go

@@ -4,10 +4,8 @@
 
 package internal
 
-
-
 // SysRoleMenu is the golang structure for table sys_role_menu.
 type SysRoleMenu struct {
-    RoleId int `orm:"role_id,primary" json:"roleId"` // 角色ID  
-    MenuId int `orm:"menu_id,primary" json:"menuId"` // 菜单ID  
-}
+	RoleId int `orm:"role_id,primary" json:"roleId"` // 角色ID
+	MenuId int `orm:"menu_id,primary" json:"menuId"` // 菜单ID
+}

+ 1 - 0
opms_admin/app/model/internal/sys_user.go

@@ -31,4 +31,5 @@ type SysUser struct {
 	UpdatedTime *gtime.Time `orm:"updated_time" json:"updatedTime"` // 更新时间
 	DeletedTime *gtime.Time `orm:"deleted_time" json:"deletedTime"` // 删除时间
 	Status      string      `orm:"status"       json:"status"`      // 帐号状态(10正常20停用)
+	UserSalt    string      `orm:"user_salt"    json:"userSalt"`    // 加密盐
 }

+ 3 - 5
opms_admin/app/model/internal/sys_user_post.go

@@ -4,10 +4,8 @@
 
 package internal
 
-
-
 // SysUserPost is the golang structure for table sys_user_post.
 type SysUserPost struct {
-    UserId int `orm:"user_id,primary" json:"userId"` // 用户ID  
-    PostId int `orm:"post_id,primary" json:"postId"` // 岗位ID  
-}
+	UserId int `orm:"user_id,primary" json:"userId"` // 用户ID
+	PostId int `orm:"post_id,primary" json:"postId"` // 岗位ID
+}

+ 3 - 5
opms_admin/app/model/internal/sys_user_role.go

@@ -4,10 +4,8 @@
 
 package internal
 
-
-
 // SysUserRole is the golang structure for table sys_user_role.
 type SysUserRole struct {
-    UserId int `orm:"user_id,primary" json:"userId"` // 用户ID  
-    RoleId int `orm:"role_id,primary" json:"roleId"` // 角色ID  
-}
+	UserId int `orm:"user_id,primary" json:"userId"` // 用户ID
+	RoleId int `orm:"role_id,primary" json:"roleId"` // 角色ID
+}

+ 62 - 1
opms_admin/app/model/sys_menu.go

@@ -11,4 +11,65 @@ import (
 // SysMenu is the golang structure for table sys_menu.
 type SysMenu internal.SysMenu
 
-// Fill with you ideas below.
+// Fill with you ideas below.
+
+// SysMenuReq 新增页面请求参数
+type SysMenuReq struct {
+	Id         int    `json:"id"`                             // ID
+	MenuName   string `json:"menuName" v:"required#菜单名称不能为空"` // 菜单名称
+	ParentId   int    `json:"parentId"`                       // 父菜单ID
+	Path       string `json:"path"`                           // 路由地址
+	Component  string `json:"component"`                      // 组件路径
+	Query      string `json:"query"`                          // 路由参数
+	IsFrame    int    `json:"isFrame"`                        // 是否为外链(10是20否)
+	IsCache    int    `json:"isCache"`                        // 是否缓存(10缓存20不缓存)
+	MenuType   string `json:"menuType" v:"required#菜单类型不能为空"` // 菜单类型(M目录C菜单 F按钮)
+	Visible    string `json:"visible"`                        // 显示状态(10显示20隐藏)
+	Status     string `json:"status"`                         // 菜单状态(10正常20停用)
+	Perms      string `json:"perms"`                          // 权限标识
+	Icon       string `json:"icon"`                           // 菜单图标
+	PlatformId int    `json:"platformId"`                     // 所属平台
+	Sort       int    `json:"sort"`                           // 显示顺序
+	Remark     string `json:"remark"`                         // 备注
+}
+
+type MenuTree struct {
+	Id        int        `json:"id"`
+	ParentId  int        `json:"parent_id"`
+	Name      string     `json:"name"`
+	Component string     `json:"component"`
+	Path      string     `json:"path"`
+	Redirect  string     `json:"redirect"`
+	Hidden    bool       `json:"hidden"`
+	Meta      Meta       `json:"meta"`
+	Children  []MenuTree `json:"children,omitempty"`
+}
+
+type Meta struct {
+	Title            string `json:"title"`
+	Icon             string `json:"icon"`
+	Link             string `json:"link"`
+	BreadcrumbHidden bool   `json:"breadcrumbHidden"`
+	NoCache          bool   `json:"noCache"`
+}
+
+func (m SysMenu) ConvMenuTree() MenuTree {
+	menuTree := MenuTree{
+		Id:        m.Id,
+		ParentId:  m.ParentId,
+		Name:      m.MenuName,
+		Component: m.Component,
+		Path:      m.Path,
+		//Redirect:  m.Redirect,
+		//Hidden:    m.Hidden,
+		Meta: Meta{
+			Title: m.MenuName,
+			Icon:  m.Icon,
+			//Link:             m.Link,
+			//BreadcrumbHidden: m.BreadcrumbHidden,
+			NoCache: m.IsCache == 1,
+		},
+		Children: nil,
+	}
+	return menuTree
+}

+ 26 - 27
opms_admin/app/model/sys_user.go

@@ -24,39 +24,38 @@ type LoginParamsReq struct {
 
 // LoginUserRes 登录返回
 type LoginUserRes struct {
-	Id           uint64 `orm:"id,primary"       json:"id"`           //
+	Id           int    `orm:"id,primary"       json:"id"`           //
 	UserName     string `orm:"user_name,unique" json:"userName"`     // 用户名
 	UserNickname string `orm:"user_nickname"    json:"userNickname"` // 用户昵称
 	UserPassword string `orm:"user_password"    json:"userPassword"` // 登录密码;cmf_password加密
 	UserSalt     string `orm:"user_salt"        json:"userSalt"`     // 加密盐
-	UserStatus   uint   `orm:"user_status"      json:"userStatus"`   // 用户状态;0:禁用,1:正常,2:未验证
-	IsAdmin      int    `orm:"is_admin"         json:"isAdmin"`      // 是否后台管理员 1 是  0   否
+	UserStatus   string `orm:"user_status"      json:"userStatus"`   // 用户状态;0:禁用,1:正常,2:未验证
 	Avatar       string `orm:"avatar" json:"avatar"`                 //头像
-	DeptId       uint64 `orm:"dept_id"       json:"deptId"`          //部门id
+	DeptId       int    `orm:"dept_id"       json:"deptId"`          //部门id
 }
 
 // SysUserSearchReq 用户搜索请求参数
 type SysUserSearchReq struct {
-	DeptId      string  `p:"deptId"` //部门id
-	DeptIds     []int64 //所属部门id数据
-	Phonenumber string  `p:"phonenumber"`
-	Status      string  `p:"status"`
-	KeyWords    string  `p:"userName"`
+	DeptId   string `json:"deptId"` //部门id
+	DeptIds  []int  //所属部门id数据
+	Phone    string `json:"phone"`
+	Status   string `json:"status"`
+	KeyWords string `json:"userName"`
 	comModel.PageReq
 }
 
 // SetUserReq 添加修改用户公用请求字段
 type SetUserReq struct {
-	DeptId      uint64  `p:"deptId" v:"required#用户部门不能为空"` //所属部门
-	Email       string  `p:"email" v:"email#邮箱格式错误"`       //邮箱
-	NickName    string  `p:"nickName" v:"required#用户昵称不能为空"`
-	Phonenumber string  `p:"phonenumber" v:"required|phone#手机号不能为空|手机号格式错误"`
-	PostIds     []int64 `p:"postIds"`
-	Remark      string  `p:"remark"`
-	RoleIds     []int64 `p:"roleIds"`
-	Sex         int     `p:"sex"`
-	Status      uint    `p:"status"`
-	IsAdmin     int     `p:"isAdmin"` // 是否后台管理员 1 是  0   否
+	DeptId   int    `p:"deptId" v:"required#用户部门不能为空"` //所属部门
+	NickName string `p:"nickName" v:"required#用户昵称不能为空"`
+	Email    string `p:"email" v:"email#邮箱格式错误"` //邮箱
+	Phone    string `p:"phone" v:"required|phone#手机号不能为空|手机号格式错误"`
+	Sex      string `p:"sex"`
+	Status   string `p:"status"`
+	Remark   string `p:"remark"`
+	IsAdmin  int    `p:"isAdmin"` // 是否后台管理员 1 是  0   否
+	RoleIds  []int  `p:"roleIds"`
+	PostIds  []int  `p:"postIds"`
 }
 
 // AddUserReq 添加用户参数
@@ -76,30 +75,30 @@ type SysUserRoleDeptRes struct {
 	*SysUser
 	Dept     *SysDept `json:"dept"`
 	RoleInfo []*struct {
-		RoleId uint   `json:"roleId"`
+		RoleId int    `json:"roleId"`
 		Name   string `json:"name"`
 	} `json:"roleInfo"`
 	Post []*struct {
-		PostId   int64  `json:"postId"`
+		PostId   int    `json:"postId"`
 		PostName string `json:"postName"`
 	} `json:"post"`
 }
 
 // SysUserResetPwdReq 重置用户密码状态参数
 type SysUserResetPwdReq struct {
-	Id       uint64 `p:"userId" v:"required#用户id不能为空"`
+	Id       int    `p:"userId" v:"required#用户id不能为空"`
 	Password string `p:"password" v:"required|password#密码不能为空|密码以字母开头,只能包含字母、数字和下划线,长度在6~18之间"`
 }
 
 // SysUserStatusReq 设置用户状态参数
 type SysUserStatusReq struct {
-	Id         uint64 `p:"userId" v:"required#用户id不能为空"`
-	UserStatus uint   `p:"status" v:"required#用户状态不能为空"`
+	Id         int `p:"userId" v:"required#用户id不能为空"`
+	UserStatus int `p:"status" v:"required#用户状态不能为空"`
 }
 
 // ProfileUpReq 个人中心修改用户信息参数
 type ProfileUpReq struct {
-	UserId       uint64
+	UserId       int
 	UserNickname string `p:"userNickname" v:"required#用户昵称不能为空" orm:"user_nickname"` // 用户昵称
 	Mobile       string `p:"mobile" v:"required|phone#手机号不能为空|手机号格式错误" orm:"mobile,unique"`
 	UserEmail    string `p:"userEmail" v:"email#邮箱格式错误" orm:"user_email"`
@@ -108,13 +107,13 @@ type ProfileUpReq struct {
 
 // ProfileUpdatePwdReq 个人中心修改用户密码
 type ProfileUpdatePwdReq struct {
-	UserId      uint64
+	UserId      int
 	OldPassword string `p:"oldPassword" v:"required#旧密码不能为空"`
 	NewPassword string `p:"newPassword" v:"required#新密码不能为空"`
 }
 
 // SysUserRes 用于查询用户信息对象
 type SysUserRes struct {
-	Id           uint64 `json:"id" orm:"id"`
+	Id           int    `json:"id" orm:"id"`
 	UserNickname string `json:"userNickname" orm:"user_nickname"`
 }

+ 65 - 0
opms_admin/app/service/base.go

@@ -1 +1,66 @@
 package service
+
+import (
+	"github.com/gogf/gf/os/gtime"
+	"log"
+	"reflect"
+)
+
+var (
+	// UpdateFieldEx 更新过滤字段
+	UpdateFieldEx = []string{"CreatedBy", "CreatedName", "CreatedTime"}
+)
+
+// SetCreatedInfo 插入数据库时设置创建信息
+func SetCreatedInfo(entry interface{}, id int, name string) {
+	v := reflect.ValueOf(entry)
+	t := reflect.TypeOf(entry)
+	if t.Kind() == reflect.Ptr {
+		t = t.Elem()
+		v = v.Elem()
+	}
+	if t.Kind() != reflect.Struct {
+		log.Println("Check type error not Struct")
+		return
+	}
+	for i := 0; i < t.NumField(); i++ {
+		fieldName := t.Field(i).Name
+		if tag, ok := t.Field(i).Tag.Lookup("orm"); ok {
+			switch tag {
+			case "created_by":
+				v.FieldByName(fieldName).Set(reflect.ValueOf(id))
+			case "created_name":
+				v.FieldByName(fieldName).Set(reflect.ValueOf(name))
+			case "created_time":
+				v.FieldByName(fieldName).Set(reflect.ValueOf(gtime.Now()))
+			}
+		}
+	}
+}
+
+// SetUpdatedInfo 插入数据库时设置修改信息
+func SetUpdatedInfo(entry interface{}, id int, name string) {
+	v := reflect.ValueOf(entry)
+	t := reflect.TypeOf(entry)
+	if t.Kind() == reflect.Ptr {
+		t = t.Elem()
+		v = v.Elem()
+	}
+	if t.Kind() != reflect.Struct {
+		log.Println("Check type error not Struct")
+		return
+	}
+	for i := 0; i < t.NumField(); i++ {
+		fieldName := t.Field(i).Name
+		if tag, ok := t.Field(i).Tag.Lookup("orm"); ok {
+			switch tag {
+			case "updated_by":
+				v.FieldByName(fieldName).Set(reflect.ValueOf(id))
+			case "updated_name":
+				v.FieldByName(fieldName).Set(reflect.ValueOf(name))
+			case "updated_time":
+				v.FieldByName(fieldName).Set(reflect.ValueOf(gtime.Now()))
+			}
+		}
+	}
+}

+ 1 - 1
opms_admin/app/service/sys_login_log.go

@@ -23,7 +23,7 @@ var (
 func (s *sysLoginLog) Invoke(data *model.LoginLogParams) {
 	s.Pool.Add(func() {
 		//写入日志数据
-		SysUser.LoginLog(data)
+		//SysUser.LoginLog(data)
 	})
 }
 

+ 223 - 0
opms_admin/app/service/sys_menu.go

@@ -0,0 +1,223 @@
+// ============================================================================
+// This is auto-generated by gf cli tool only once. Fill this file as you wish.
+// ============================================================================
+
+package service
+
+import (
+	"context"
+	"dashoo.cn/common_definition/admin/menu_def"
+	"dashoo.cn/micro/app/dao"
+	"dashoo.cn/micro/app/model"
+	"dashoo.cn/opms_libary/micro_srv"
+	"errors"
+	"github.com/gogf/gf/errors/gerror"
+	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/util/gconv"
+)
+
+type MenuService struct {
+	Dao *dao.SysMenuDao
+}
+
+func NewMenuService(ctx context.Context) (*MenuService, error) {
+	menu := new(MenuService)
+	// 获取租户码
+	tenant, err := micro_srv.GetTenant(ctx)
+	if err != nil {
+		return nil, err
+	}
+	g.Log().Info("Received Menu.Login request @ " + tenant)
+	menu.Dao = dao.NewSysMenuDao(tenant)
+	return menu, err
+}
+
+// Add 添加菜单项
+func (s MenuService) Add(ctx context.Context, param *model.SysMenuReq) (id int64, err error) {
+	// 菜单类型 D目录 M菜单 F按钮或功能 I接口
+	if param.MenuType == "F" && param.Perms == "" {
+		return -1, errors.New("权限标识不能为空!")
+	}
+	if param.Perms != "" {
+		count, err := s.Dao.M.Count("Perms", param.Perms)
+		if err != nil {
+			return -1, err
+		}
+		if count > 0 {
+			return -1, errors.New("权限标识已存在。")
+		}
+	}
+	if param.MenuType == "D" {
+		param.Component = "Layout"
+	}
+
+	var entity *model.SysMenu
+	if err := gconv.Struct(param, &entity); err != nil {
+		return -1, err
+	}
+	// 用户基础信息
+	//userInfo, err := micro_srv.GetUserInfo(ctx)
+	//if err != nil {
+	//	return 0, err
+	//}
+	SetCreatedInfo(entity, int(1), "userInfo.UserName")
+	if result, err := s.Dao.M.Insert(entity); err != nil {
+		return -1, err
+	} else {
+		id, err := result.LastInsertId()
+		if err != nil {
+			return -1, err
+		}
+		//err = s.initPaths(int(id), param.ParentId)
+		//if err != nil {
+		//	return -1, err
+		//}
+		return id, nil
+	}
+}
+
+// UpdateById 根据ID更新菜单项
+func (s MenuService) UpdateById(ctx context.Context, param *model.SysMenuReq) error {
+	// 菜单类型 D目录 M菜单 F按钮或功能 I接口
+	if param.MenuType == "F" && param.Perms == "" {
+		return gerror.New("权限标识不能为空!")
+	}
+	if param.MenuType == "D" {
+		param.Component = "Layout"
+	}
+	var entity *model.SysMenu
+	if err := gconv.Struct(param, &entity); err != nil {
+		g.Log().Error(err)
+		return gerror.New("数据转换异常,请重新尝试")
+	}
+
+	db := s.Dao.M
+	menu, err := db.FindOne("Id", entity.Id)
+	if err != nil {
+		return err
+	}
+	if menu.IsEmpty() {
+		return gerror.New("菜单不存在")
+	}
+
+	if entity.Perms != "" {
+		exist, err := db.Where("Id !=?", entity.Id).Where("perms", entity.Perms).FindOne()
+		if err != nil {
+			return err
+		}
+		if !exist.IsEmpty() {
+			return gerror.New("权限标识已存在。")
+		}
+	}
+	// 用户基础信息
+	//userInfo, err := micro_srv.GetUserInfo(ctx)
+	//if err != nil {
+	//	return err
+	//}
+	SetUpdatedInfo(entity, int(1), "userInfo.UserName")
+	_, err = db.FieldsEx(UpdateFieldEx).Where("Id", entity.Id).Update(entity)
+	if err != nil {
+		return err
+	}
+	//err = s.savePaths(ctx, entity.Id, entity.ParentId, menu["Paths"].String())
+	return err
+}
+
+func (s MenuService) Delete(id int) (err error) {
+	db := s.Dao.M
+	record, err := db.FindOne("Id", id)
+	if err != nil {
+		return err
+	}
+	if record.IsEmpty() {
+		return gerror.New("菜单不存在")
+	}
+	_, err = db.Delete("Id", id)
+	//delParentId := record["ParentId"].String()
+	//if err != nil {
+	//	return err
+	//}
+	//res, _ := db.Data("parent_id", delParentId).Where("parent_id", id).Update()
+	//
+	//if res != nil {
+	//	if delParentId == "0" {
+	//		updatesql := "Paths = replace(Paths, '" + strconv.Itoa(id) + "/" + "', '')"
+	//		_, err = db.Update(updatesql, " Paths like '"+strconv.Itoa(id)+"/%'")
+	//	} else {
+	//		updatesql := "Paths = replace(Paths, '" + record["Paths"].String() + "', '" + delParentId + "')"
+	//		_, err = db.Update(updatesql, " Paths like '"+record["Paths"].String()+"/%'")
+	//	}
+	//}
+	return err
+}
+
+// GetEntity 获取菜单项实体
+func (s MenuService) GetEntity(id int64) (*model.SysMenu, error) {
+	one, err := s.Dao.M.FindOne(id)
+	if err != nil {
+		return nil, err
+	}
+	if one.IsEmpty() {
+		return nil, nil
+	}
+	var entity *model.SysMenu
+	if err = one.Struct(&entity); err != nil {
+		return nil, err
+	}
+	return entity, nil
+}
+
+// GetList 获取菜单列表
+func (s MenuService) GetList(param *menu_def.SelectReq) ([]model.SysMenu, error) {
+	db := s.Dao.M
+	if param != nil {
+		if param.Title != "" {
+			db = db.Where("menu_name like ?", "%"+param.Title+"%")
+		}
+		if param.Visible != "" {
+			db = db.Where("visible", param.Visible)
+		}
+		if param.Order != "" {
+			sort := "ASC"
+			if !param.IsAsc {
+				sort = "DESC"
+			}
+			db = db.Order(param.Order + " " + sort)
+		} else {
+			db = db.Order("sort")
+		}
+	}
+
+	result := make([]model.SysMenu, 0)
+	if err := db.FindScan(&result); err != nil {
+		return nil, err
+	}
+	return result, nil
+}
+
+// GetMenuTree 获取菜单树
+func (s MenuService) GetMenuTree() ([]model.MenuTree, error) {
+	db := s.Dao.M
+	menuList := make([]model.SysMenu, 0)
+	err := db.Where("visible = 10").Where("menu_type IN (?)", g.Slice{"M", "C"}).Order("sort").Scan(&menuList)
+
+	treeMap := make(map[int][]model.MenuTree, 0)
+	for _, v := range menuList {
+		treeMap[v.ParentId] = append(treeMap[v.ParentId], v.ConvMenuTree())
+	}
+	menuTree := treeMap[0]
+	for i := 0; i < len(menuTree); i++ {
+		s.getChildrenList(&menuTree[i], treeMap)
+	}
+	return menuTree, err
+}
+
+// getChildrenList 获取菜单的子菜单
+func (s MenuService) getChildrenList(menu *model.MenuTree, treeMap map[int][]model.MenuTree) {
+	if value, ok := treeMap[menu.Id]; ok {
+		menu.Children = value
+		for i := 0; i < len(menu.Children); i++ {
+			s.getChildrenList(&menu.Children[i], treeMap)
+		}
+	}
+}

+ 1 - 1
opms_admin/app/service/sys_oper_log.go

@@ -4,7 +4,7 @@ import (
 	comModel "dashoo.cn/micro/app/common/model"
 	"dashoo.cn/micro/app/dao"
 	"dashoo.cn/micro/app/model"
-	"dashoo.cn/micro_libary/utils"
+	"dashoo.cn/opms_libary/utils"
 	"github.com/gogf/gf/encoding/gjson"
 	"github.com/gogf/gf/errors/gerror"
 	"github.com/gogf/gf/frame/g"

+ 1 - 1
opms_admin/app/service/sys_role.go

@@ -6,7 +6,7 @@ import (
 	"dashoo.cn/micro/app/common/service"
 	"dashoo.cn/micro/app/dao"
 	"dashoo.cn/micro/app/model"
-	"dashoo.cn/micro_libary/utils"
+	"dashoo.cn/opms_libary/utils"
 	"database/sql"
 	"errors"
 	"fmt"

+ 334 - 510
opms_admin/app/service/sys_user.go

@@ -2,68 +2,154 @@ package service
 
 import (
 	"context"
+	comModel "dashoo.cn/micro/app/common/model"
+	"dashoo.cn/micro/app/common/service"
 	"dashoo.cn/micro/app/dao"
 	"dashoo.cn/micro/app/model"
+	"dashoo.cn/opms_libary/micro_srv"
+	"dashoo.cn/opms_libary/utils"
 	"errors"
 	"fmt"
 	"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/gtime"
-	"github.com/gogf/gf/text/gstr"
 	"github.com/gogf/gf/util/gconv"
 	"github.com/gogf/gf/util/grand"
-	"github.com/mssola/user_agent"
-	"reflect"
 )
 
-type sysUser struct {
-	NotCheckAuthAdminIds *gset.Set //无需验证权限的用户id
+type UserService struct {
+	Dao *dao.SysUserDao
 }
 
-type UserMenu struct {
-	*model.SysAuthRuleInfoRes
-	Index     string `json:"index"`
-	Name      string `json:"name"`
-	MenuName  string `json:"menuName"`
-	Component string `json:"component"`
-	Path      string `json:"path"`
-	Meta      struct {
-		Icon  string `json:"icon"`
-		Title string `json:"title"`
-	} `json:"meta"`
-	Hidden     bool `json:"hidden"`
-	AlwaysShow bool `json:"alwaysShow"`
-}
-
-type UserMenus struct {
-	UserMenu
-	Children []UserMenus `json:"children"`
-}
-
-var (
-	notCheckAuthAdminIds = g.Cfg().GetInterfaces("system.notCheckAuthAdminIds")
-	SysUser              = &sysUser{
-		NotCheckAuthAdminIds: gset.NewFrom(notCheckAuthAdminIds),
+func NewUserService(ctx context.Context) (*UserService, error) {
+	user := new(UserService)
+	// 获取租户码
+	tenant, err := micro_srv.GetTenant(ctx)
+	if err != nil {
+		return nil, err
 	}
-)
+	g.Log().Info("Received User.Login request @ " + tenant)
+	user.Dao = dao.NewSysUserDao(tenant)
+	return user, err
+}
+
+//// Login 用户登录,成功返回用户UUID,否则返回空字符串;
+//func (s *sysUser) Login(ctx context.Context, tenant, username, password string) (interface{}, error) {
+//	record, err := s.SafeModel.Where("username", username).Where("Enabled=1").FindOne()
+//	if err != nil {
+//		return nil, errors.New("系统异常")
+//	}
+//	if record.IsEmpty() {
+//		return nil, errors.New("账号或密码错误,或限制登录")
+//	}
+//
+//	encodedPwd := record["UserPassword"].String()
+//	pubKey := record["PublicKey"].String()
+//	p, err := utils.TripleDesDecrypt(encodedPwd, pubKey)
+//	if err != nil {
+//		return nil, errors.New("密码算法错误")
+//	}
+//	if password != p {
+//		return nil, errors.New("账号或密码错误")
+//	}
+//	var userInfo request.UserInfo
+//	userInfo.Id = record["Id"].Int32()
+//	userInfo.UserName = record["UserName"].String()
+//	userInfo.RealName = record["Realname"].String()
+//	userInfo.Uuid = record["Uuid"].String()
+//	userInfo.DeptId = record["DepartmentId"].String()
+//	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
+//	dataByte, _ := json.Marshal(userInfo)
+//	rsp := &auth.Response{}
+//	err = authService.Call(ctx, "GetToken", &auth.Request{
+//		Tenant:  tenant,
+//		UserKey: userInfo.UserName,
+//		Uuid:    userInfo.Uuid,
+//		Data:    string(dataByte),
+//	}, rsp)
+//	if err != nil {
+//		return nil, err
+//	}
+//	jsonData, err := gjson.DecodeToJson(rsp.Data)
+//	if err != nil {
+//		return nil, err
+//	}
+//
+//	return jsonData, nil
+//}
+//
+//// LogOut 退出登录
+//func (s *sysUser) LogOut(ctx context.Context, token string) error {
+//	glog.Info("Received Auth.RemoveToken request, token:", reqToken)
+//	tokenResp := gfToken.RemoveToken(reqToken)
+//	if err := gconv.Struct(tokenResp, rsp); err != nil {
+//		return err
+//	}
+//	return nil
+//}
+
+func (s *UserService) GetUserList(req *model.SysUserSearchReq) (total int, userList []*model.SysUser, err error) {
+	if req.PageSize == 0 {
+		req.PageSize = comModel.PageSize
+	}
+	userModel := dao.SysUser.M
+	if req.KeyWords != "" {
+		keyWords := "%" + req.KeyWords + "%"
+		userModel = userModel.Where("user_name like ? or  nick_name like ?", keyWords, keyWords)
+	}
+	if len(req.DeptIds) != 0 {
+		userModel = userModel.Where("dept_id in (?)", req.DeptIds)
+	}
+	if req.Status != "" {
+		userModel = userModel.Where("status", gconv.Int(req.Status))
+	}
+	if req.Phone != "" {
+		userModel = userModel.Where("phone like ?", "%"+req.Phone+"%")
+	}
+	if req.BeginTime != "" {
+		userModel = userModel.Where("created_at >=?", req.BeginTime)
+	}
+	if req.EndTime != "" {
+		userModel = userModel.Where("created_at <=?", req.EndTime)
+	}
+	total, err = userModel.Count()
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("获取总行数失败")
+		return
+	}
+	if req.PageNum == 0 {
+		req.PageNum = 1
+	}
+	err = userModel.FieldsEx(dao.SysUser.Columns.Password, dao.SysUser.Columns.UserSalt).
+		Page(req.PageNum, req.PageSize).Order("id asc").Scan(&userList)
+	return
+}
 
 // GetAdminUserByUsernamePassword 后台登陆验证
-func (s *sysUser) GetAdminUserByUsernamePassword(ctx context.Context, req *model.LoginParamsReq) (user *model.LoginUserRes, err error) {
+func (s *UserService) GetAdminUserByUsernamePassword(ctx context.Context, req *model.LoginParamsReq) (user *model.LoginUserRes, err error) {
 	user, err = s.GetUserByUsernamePassword(ctx, req)
 	if err != nil {
 		return
 	}
 	//判断是否后台用户
-	if user.IsAdmin != 1 {
-		return nil, gerror.New("抱歉!您不属于后台管理员!")
-	}
+	//if user.IsAdmin != 1 {
+	//	return nil, gerror.New("抱歉!您不属于后台管理员!")
+	//}
 	return
 }
 
 // GetUserByUsernamePassword 登陆验证
-func (s *sysUser) GetUserByUsernamePassword(ctx context.Context, req *model.LoginParamsReq) (user *model.LoginUserRes, err error) {
+func (s *UserService) GetUserByUsernamePassword(ctx context.Context, req *model.LoginParamsReq) (user *model.LoginUserRes, err error) {
 	user, err = s.GetUserByUsername(ctx, req.Username)
 	if err != nil {
 		return
@@ -72,28 +158,28 @@ func (s *sysUser) GetUserByUsernamePassword(ctx context.Context, req *model.Logi
 		return nil, gerror.New("账号密码错误")
 	}
 	//验证密码
-	if library.EncryptPassword(req.Password, user.UserSalt) != user.UserPassword {
+	if utils.EncryptPassword(req.Password, user.UserSalt) != user.UserPassword {
 		return nil, gerror.New("账号密码错误")
 	}
 	//账号状态
-	if user.UserStatus == 0 {
+	if user.UserStatus == "20" {
 		return nil, gerror.New("账号已被冻结")
 	}
 	return
 }
 
 // GetUserByUsername 通过用户名获取用户信息
-func (s *sysUser) GetUserByUsername(ctx context.Context, userName string) (user *model.LoginUserRes, err error) {
+func (s *UserService) GetUserByUsername(ctx context.Context, userName string) (user *model.LoginUserRes, err error) {
 	return dao.SysUser.FindByUsername(ctx, userName)
 }
 
 // UpdateLoginInfo 更新用户登录信息 保存登录日志
-func (s *sysUser) UpdateLoginInfo(id uint64, username, ip, userAgent, msg, module string) {
+func (s *UserService) UpdateLoginInfo(id int, username, ip, userAgent, msg, module string) {
 	status := 0 //登录状态 0失败 1成功
 	if id != 0 {
 		//说明登录成功更新登录信息
 		status = 1
-		dao.SysUser.UpLoginInfo(id, ip)
+		//dao.SysUser.UpLoginInfo(id, ip)
 	}
 	//保存登录日志(异步)
 	SysLoginLog.Invoke(&model.LoginLogParams{
@@ -107,30 +193,30 @@ func (s *sysUser) UpdateLoginInfo(id uint64, username, ip, userAgent, msg, modul
 }
 
 // LoginLog 记录登录日志
-func (s *sysUser) LoginLog(params *model.LoginLogParams) {
-	ua := user_agent.New(params.UserAgent)
-	browser, _ := ua.Browser()
-	loginData := &model.SysLogin{
-		LoginName:     params.Username,
-		Ipaddr:        params.Ip,
-		LoginLocation: library.GetCityByIp(params.Ip),
-		Browser:       browser,
-		Os:            ua.OS(),
-		Status:        params.Status,
-		Msg:           params.Msg,
-		LoginTime:     gtime.Now(),
-		Module:        params.Module,
-	}
-	dao.SysLoginLog.SaveLog(loginData)
+func (s *UserService) LoginLog(params *model.LoginLogParams) {
+	//ua := user_agent.New(params.UserAgent)
+	//browser, _ := ua.Browser()
+	//loginData := &model.SysLogin{
+	//	LoginName:     params.Username,
+	//	Ipaddr:        params.Ip,
+	//	LoginLocation: utils.GetCityByIp(params.Ip),
+	//	Browser:       browser,
+	//	Os:            ua.OS(),
+	//	Status:        params.Status,
+	//	Msg:           params.Msg,
+	//	LoginTime:     gtime.Now(),
+	//	Module:        params.Module,
+	//}
+	//dao.SysLoginLog.SaveLog(loginData)
 }
 
 // SaveOnline 保存用户登录在线状态信息
-func (s *sysUser) SaveOnline(params *model.SysUserOnline) {
-	dao.SysUserOnline.SaveOnline(params)
-}
+//func (s *sysUser) SaveOnline(params *model.SysUserOnline) {
+//	dao.SysUserOnline.SaveOnline(params)
+//}
 
 // GetAdminRole 获取用户角色
-func (s *sysUser) GetAdminRole(userId uint64, allRoleList []*model.SysRole) (roles []*model.SysRole, err error) {
+func (s *UserService) GetAdminRole(userId int, allRoleList []*model.SysRole) (roles []*model.SysRole, err error) {
 	var roleIds []uint
 	roleIds, err = s.GetAdminRoleIds(userId)
 	if err != nil {
@@ -139,7 +225,7 @@ func (s *sysUser) GetAdminRole(userId uint64, allRoleList []*model.SysRole) (rol
 	roles = make([]*model.SysRole, 0, len(allRoleList))
 	for _, v := range allRoleList {
 		for _, id := range roleIds {
-			if id == v.Id {
+			if int(id) == v.Id {
 				roles = append(roles, v)
 			}
 		}
@@ -151,7 +237,7 @@ func (s *sysUser) GetAdminRole(userId uint64, allRoleList []*model.SysRole) (rol
 }
 
 // GetAdminRoleIds 获取用户角色ids
-func (s *sysUser) GetAdminRoleIds(userId uint64) (roleIds []uint, err error) {
+func (s *UserService) GetAdminRoleIds(userId int) (roleIds []uint, err error) {
 	enforcer, e := service.Casbin.GetEnforcer()
 	if e != nil {
 		err = e
@@ -169,347 +255,8 @@ func (s *sysUser) GetAdminRoleIds(userId uint64) (roleIds []uint, err error) {
 	return
 }
 
-func (s *sysUser) GetPermissions(roleIds []uint) ([]string, error) {
-	//获取角色对应的菜单id
-	enforcer, err := service.Casbin.GetEnforcer()
-	if err != nil {
-		return nil, err
-	}
-	menuIds := map[int64]int64{}
-	for _, roleId := range roleIds {
-		//查询当前权限
-		gp := enforcer.GetFilteredPolicy(0, gconv.String(roleId))
-		for _, p := range gp {
-			mid := gconv.Int64(p[1])
-			menuIds[mid] = mid
-		}
-	}
-	//获取所有开启的按钮
-	allButtons, err := Rule.GetIsButtonStatusList()
-	userButtons := make([]string, 0, len(allButtons))
-	for _, button := range allButtons {
-		if _, ok := menuIds[gconv.Int64(button.Id)]; gstr.Equal(button.Condition, "nocheck") || ok {
-			userButtons = append(userButtons, button.Name)
-		}
-	}
-	return userButtons, nil
-}
-
-func (s *sysUser) GetAllMenus() (menus []UserMenus, err error) {
-	//获取所有开启的菜单
-	var allMenus []*model.SysAuthRuleInfoRes
-	allMenus, err = Rule.GetIsMenuStatusList()
-	if err != nil {
-		return
-	}
-	menus = make([]UserMenus, len(allMenus))
-	for k, v := range allMenus {
-		var menu UserMenu
-		menu = s.setMenuData(menu, v)
-		menus[k] = UserMenus{UserMenu: menu}
-	}
-	menus = s.GetMenusTree(menus, 0)
-	return
-}
-
-func (s *sysUser) GetAdminMenusByRoleIds(roleIds []uint) (menus []UserMenus, err error) {
-	//获取角色对应的菜单id
-	enforcer, e := service.Casbin.GetEnforcer()
-	if e != nil {
-		err = e
-		return
-	}
-	menuIds := map[int64]int64{}
-	for _, roleId := range roleIds {
-		//查询当前权限
-		gp := enforcer.GetFilteredPolicy(0, fmt.Sprintf("%d", roleId))
-		for _, p := range gp {
-			mid := gconv.Int64(p[1])
-			menuIds[mid] = mid
-		}
-	}
-	//获取所有开启的菜单
-	allMenus, err := Rule.GetIsMenuStatusList()
-	if err != nil {
-		return
-	}
-	menus = make([]UserMenus, 0, len(allMenus))
-	for _, v := range allMenus {
-		if _, ok := menuIds[gconv.Int64(v.Id)]; gstr.Equal(v.Condition, "nocheck") || ok {
-			var roleMenu UserMenu
-			roleMenu = s.setMenuData(roleMenu, v)
-			menus = append(menus, UserMenus{UserMenu: roleMenu})
-		}
-	}
-	menus = s.GetMenusTree(menus, 0)
-	return
-}
-
-func (s *sysUser) GetMenusTree(menus []UserMenus, pid uint) []UserMenus {
-	returnList := make([]UserMenus, 0, len(menus))
-	for _, menu := range menus {
-		if menu.Pid == pid {
-			menu.Children = s.GetMenusTree(menus, menu.Id)
-			returnList = append(returnList, menu)
-		}
-	}
-	return returnList
-}
-
-func (s *sysUser) setMenuData(menu UserMenu, entity *model.SysAuthRuleInfoRes) UserMenu {
-	menu = UserMenu{
-		SysAuthRuleInfoRes: entity,
-		Index:              entity.Name,
-		Name:               gstr.UcFirst(entity.Path),
-		MenuName:           entity.Title,
-		Meta: struct {
-			Icon  string `json:"icon"`
-			Title string `json:"title"`
-		}(struct {
-			Icon  string
-			Title string
-		}{Icon: entity.Icon, Title: entity.Title}),
-	}
-	if entity.MenuType != 0 {
-		menu.Component = entity.Component
-		menu.Path = entity.Path
-	} else {
-		menu.Component = "Layout"
-		menu.Path = "/" + entity.Path
-	}
-	if entity.AlwaysShow == 1 {
-		menu.Hidden = false
-	} else {
-		menu.Hidden = true
-	}
-	if entity.AlwaysShow == 1 && entity.MenuType == 0 {
-		menu.AlwaysShow = true
-	} else {
-		menu.AlwaysShow = false
-	}
-	return menu
-}
-
-func (s *sysUser) WriteDeptIdsOfSearchReq(req *model.SysUserSearchReq) error {
-	if req.DeptId == "" {
-		return nil
-	}
-	depts, e := Dept.GetList(&dao.SysDeptSearchParams{
-		Status: "1",
-	})
-	if e != nil {
-		return e
-	}
-	deptId := gconv.Int64(req.DeptId)
-	req.DeptIds = append(req.DeptIds, deptId)
-	children := Dept.FindSonByParentId(depts, deptId)
-	for _, d := range children {
-		req.DeptIds = append(req.DeptIds, d.DeptId)
-	}
-	return nil
-}
-
-// GetUsersRoleDept 获取多个用户角色 部门信息
-func (s *sysUser) GetUsersRoleDept(userList []*model.SysUser) ([]*model.SysUserRoleDeptRes, error) {
-	allRoles, err := SysRole.GetRoleList()
-	if err != nil {
-		g.Log().Error(err)
-		return nil, err
-	}
-	depts, err := Dept.GetList(&dao.SysDeptSearchParams{})
-	if err != nil {
-		g.Log().Error(err)
-		return nil, err
-	}
-	users := make([]*model.SysUserRoleDeptRes, len(userList))
-	for k, u := range userList {
-		var dept *model.SysDept
-		users[k] = &model.SysUserRoleDeptRes{
-			SysUser: u,
-		}
-		for _, d := range depts {
-			if u.DeptId == uint64(d.DeptId) {
-				dept = d
-			}
-		}
-		users[k].Dept = dept
-		roles, err := s.GetAdminRole(u.Id, allRoles)
-		if err != nil {
-			g.Log().Error(err)
-			return nil, err
-		}
-		for _, r := range roles {
-			users[k].RoleInfo = append(users[k].RoleInfo, &struct {
-				RoleId uint   `json:"roleId"`
-				Name   string `json:"name"`
-			}{RoleId: r.Id, Name: r.Name})
-		}
-	}
-	return users, nil
-}
-
-// GetUserRoleDeptPost 获取某个用户对应的部门、岗位、角色信息
-func (s *sysUser) GetUserRoleDeptPost(user *model.SysUser) (*model.SysUserRoleDeptRes, error) {
-	allRoles, err := SysRole.GetRoleList()
-	if err != nil {
-		g.Log().Error(err)
-		return nil, err
-	}
-	//部门
-	depts, err := Dept.GetList(&dao.SysDeptSearchParams{})
-	if err != nil {
-		g.Log().Error(err)
-		return nil, err
-	}
-	userData := &model.SysUserRoleDeptRes{
-		SysUser: user,
-	}
-	for _, d := range depts {
-		if user.DeptId == uint64(d.DeptId) {
-			userData.Dept = d
-		}
-	}
-	//角色
-	roles, err := s.GetAdminRole(user.Id, allRoles)
-	if err != nil {
-		g.Log().Error(err)
-		return nil, err
-	}
-	for _, r := range roles {
-		userData.RoleInfo = append(userData.RoleInfo, &struct {
-			RoleId uint   `json:"roleId"`
-			Name   string `json:"name"`
-		}{RoleId: r.Id, Name: r.Name})
-	}
-	//岗位
-	posts, err := s.GetPostsByUserId(user.Id)
-	if err != nil {
-		return nil, err
-	}
-
-	for _, v := range posts {
-		userData.Post = append(userData.Post, &struct {
-			PostId   int64  `json:"postId"`
-			PostName string `json:"postName"`
-		}{PostId: v.PostId, PostName: v.PostName})
-	}
-	return userData, nil
-}
-
-func (s *sysUser) GetUserList(req *model.SysUserSearchReq) (total, page int, userList []*model.SysUser, err error) {
-	if req.PageSize == 0 {
-		req.PageSize = comModel.PageSize
-	}
-	userModel := dao.SysUser.M
-	if req.KeyWords != "" {
-		keyWords := "%" + req.KeyWords + "%"
-		userModel = userModel.Where("user_name like ? or  user_nickname like ?", keyWords, keyWords)
-	}
-	if len(req.DeptIds) != 0 {
-		userModel = userModel.Where("dept_id in (?)", req.DeptIds)
-	}
-	if req.Status != "" {
-		userModel = userModel.Where("user_status", gconv.Int(req.Status))
-	}
-	if req.Phonenumber != "" {
-		userModel = userModel.Where("mobile like ?", "%"+req.Phonenumber+"%")
-	}
-	if req.BeginTime != "" {
-		userModel = userModel.Where("created_at >=?", req.BeginTime)
-	}
-	if req.EndTime != "" {
-		userModel = userModel.Where("created_at <=?", req.EndTime)
-	}
-	total, err = userModel.Count()
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("获取总行数失败")
-		return
-	}
-	if req.PageNum == 0 {
-		req.PageNum = 1
-	}
-	page = req.PageNum
-	err = userModel.FieldsEx(dao.SysUser.Columns.UserPassword, dao.SysUser.Columns.UserSalt).
-		Page(page, req.PageSize).Order("id asc").Scan(&userList)
-	return
-}
-
-func (s *sysUser) AddUser(req *model.AddUserReq) (err error) {
-	req.UserSalt = grand.S(10)
-	req.Password = library.EncryptPassword(req.Password, req.UserSalt)
-	var tx *gdb.TX
-	tx, err = g.DB().Begin()
-	if err != nil {
-		err = gerror.New("事务开启失败")
-		return
-	}
-	Model := dao.SysUser.TX(tx)
-	if i, _ := Model.Where("user_name=?", req.UserName).Count(); i != 0 {
-		err = gerror.New("用户名已经存在")
-		tx.Rollback()
-		return
-	}
-	if i, _ := Model.Where("mobile=?", req.Phonenumber).Count(); i != 0 {
-		err = gerror.New("手机号已经存在")
-		tx.Rollback()
-		return
-	}
-	userData := new(model.SysUser)
-	userData.UserName = req.UserName
-	userData.DeptId = req.DeptId
-	userData.UserStatus = req.Status
-	userData.Mobile = req.Phonenumber
-	userData.Sex = req.Sex
-	userData.UserEmail = req.Email
-	userData.UserNickname = req.NickName
-	userData.UserSalt = req.UserSalt
-	userData.UserPassword = req.Password
-	userData.Remark = req.Remark
-	userData.IsAdmin = req.IsAdmin
-	res, err := Model.Insert(userData)
-	if err != nil {
-		tx.Rollback()
-		return
-	}
-	InsertId, _ := res.LastInsertId()
-	err = s.AddUserRole(req.RoleIds, InsertId)
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("设置用户权限失败")
-		tx.Rollback()
-		return
-	}
-	err = s.AddUserPost(req.PostIds, InsertId, tx)
-	if err != nil {
-		g.Log().Error(err)
-		err = gerror.New("设置用户岗位信息失败")
-		tx.Rollback()
-		return
-	}
-	tx.Commit()
-	return
-}
-
-// AddUserRole 添加用户角色信息
-func (s *sysUser) AddUserRole(roleIds interface{}, userId int64) (err error) {
-	enforcer, e := service.Casbin.GetEnforcer()
-	if e != nil {
-		err = e
-		return
-	}
-	rule := gconv.Ints(roleIds)
-	for _, v := range rule {
-		_, err = enforcer.AddGroupingPolicy(fmt.Sprintf("%d", userId), fmt.Sprintf("%d", v))
-		if err != nil {
-			return
-		}
-	}
-	return
-}
-
 // AddUserPost 添加用户岗位信息
-func (s *sysUser) AddUserPost(postIds []int64, userId int64, tx *gdb.TX) (err error) {
+func (s *UserService) AddUserPost(postIds []int, userId int64, tx *gdb.TX) (err error) {
 	//删除旧岗位信息
 	_, err = dao.SysUserPost.TX(tx).Where(dao.SysUserPost.Columns.UserId, userId).Delete()
 	if err != nil {
@@ -536,14 +283,14 @@ func (s *sysUser) AddUserPost(postIds []int64, userId int64, tx *gdb.TX) (err er
 }
 
 // GetUserInfoById 通过Id获取用户信息
-func (s *sysUser) GetUserInfoById(id uint64, withPwd ...bool) (user *model.SysUser, err error) {
+func (s *UserService) GetUserInfoById(id int, withPwd ...bool) (user *model.SysUser, err error) {
 	if len(withPwd) > 0 && withPwd[0] {
 		//用户用户信息
 		err = dao.SysUser.Where(dao.SysUser.Columns.Id, id).Scan(&user)
 	} else {
 		//用户用户信息
 		err = dao.SysUser.Where(dao.SysUser.Columns.Id, id).
-			FieldsEx(dao.SysUser.Columns.UserPassword, dao.SysUser.Columns.UserSalt).Scan(&user)
+			FieldsEx(dao.SysUser.Columns.Password, dao.SysUser.Columns.UserSalt).Scan(&user)
 	}
 	if err != nil {
 		g.Log().Error(err)
@@ -553,7 +300,7 @@ func (s *sysUser) GetUserInfoById(id uint64, withPwd ...bool) (user *model.SysUs
 }
 
 // GetEditUser 获取要修改的用户信息
-func (s *sysUser) GetEditUser(id uint64) (g.Map, error) {
+func (s *UserService) GetEditUser(id int) (g.Map, error) {
 	userData, err := s.GetUserInfoById(id)
 	//获取角色信息
 	roleList, err := SysRole.GetRoleList()
@@ -562,7 +309,7 @@ func (s *sysUser) GetEditUser(id uint64) (g.Map, error) {
 		return nil, errors.New("获取角色数据失败")
 	}
 	//获取已选择的角色信息
-	checkedRoleIds, err := SysUser.GetAdminRoleIds(id)
+	checkedRoleIds, err := s.GetAdminRoleIds(id)
 	if err != nil {
 		g.Log().Error(err)
 		return nil, errors.New("获取用户角色数据失败")
@@ -581,7 +328,7 @@ func (s *sysUser) GetEditUser(id uint64) (g.Map, error) {
 	}
 
 	if checkedPosts == nil {
-		checkedPosts = []int64{}
+		checkedPosts = []int{}
 	}
 
 	res := g.Map{
@@ -596,9 +343,9 @@ func (s *sysUser) GetEditUser(id uint64) (g.Map, error) {
 }
 
 // GetUsedPost 获取正常状态的岗位
-func (s *sysUser) GetUsedPost() (list []*model.SysPost, err error) {
-	err = dao.SysPost.Where(dao.SysPost.C.Status, 1).
-		Order(dao.SysPost.C.PostSort + " ASC, " + dao.SysPost.C.PostId + " ASC ").Scan(&list)
+func (s *UserService) GetUsedPost() (list []*model.SysPost, err error) {
+	err = dao.SysPost.Where(dao.SysPost.Columns.Status, 1).
+		Order(dao.SysPost.Columns.Sort + " ASC, " + dao.SysPost.Columns.Id + " ASC ").Scan(&list)
 	if err != nil {
 		g.Log().Error(err)
 		err = gerror.New("获取岗位数据失败")
@@ -607,34 +354,112 @@ func (s *sysUser) GetUsedPost() (list []*model.SysPost, err error) {
 }
 
 // GetUserPostIds 获取用户岗位
-func (s *sysUser) GetUserPostIds(userId uint64) (postIds []int64, err error) {
+func (s *UserService) GetUserPostIds(userId int) (postIds []int, err error) {
 	var list []*model.SysUserPost
 	err = dao.SysUserPost.Where(dao.SysUserPost.Columns.UserId, userId).Scan(&list)
 	if err != nil {
 		g.Log().Error(err)
 		return nil, gerror.New("获取用户岗位信息失败")
 	}
-	postIds = make([]int64, 0)
+	postIds = make([]int, 0)
 	for _, entity := range list {
-		postIds = append(postIds, entity.PostId)
+		postIds = append(postIds, int(entity.PostId))
 	}
 	return
 }
 
 // GetPostsByUserId 根据用户id获取岗位信息详情
-func (s *sysUser) GetPostsByUserId(userId uint64) ([]*model.SysPost, error) {
+func (s *UserService) GetPostsByUserId(userId int) ([]*model.SysPost, error) {
 	postIds, err := s.GetUserPostIds(userId)
 	if err != nil {
 		return nil, err
 	}
 	var posts []*model.SysPost
-	err = dao.SysPost.Where(dao.SysPost.C.PostId+" in (?)", postIds).Scan(&posts)
+	err = dao.SysPost.Where(dao.SysPost.Columns.Id+" in (?)", postIds).Scan(&posts)
 	return posts, err
 }
 
+func (s *UserService) AddUser(req *model.AddUserReq) (err error) {
+	req.UserSalt = grand.S(10)
+	req.Password = utils.EncryptPassword(req.Password, req.UserSalt)
+	var tx *gdb.TX
+	tx, err = g.DB().Begin()
+	if err != nil {
+		err = gerror.New("事务开启失败")
+		return
+	}
+	Model := dao.SysUser.TX(tx)
+	if i, _ := Model.Where("user_name=?", req.UserName).Count(); i != 0 {
+		err = gerror.New("用户名已经存在")
+		tx.Rollback()
+		return
+	}
+	if i, _ := Model.Where("phone=?", req.Phone).Count(); i != 0 {
+		err = gerror.New("手机号已经存在")
+		tx.Rollback()
+		return
+	}
+	userData := new(model.SysUser)
+	//userData.UserName = req.UserName
+	//userData.DeptId = req.DeptId
+	//userData.Status = req.Status
+	//userData.Phone = req.Phone
+	//userData.Sex = req.Sex
+	//userData.Email = req.Email
+	//userData.NickName = req.NickName
+	//userData.UserSalt = req.UserSalt
+	//userData.Password = req.Password
+	//userData.Remark = req.Remark
+	err = gconv.Struct(req, userData)
+	if err != nil {
+		tx.Rollback()
+		return
+	}
+	res, err := Model.Insert(userData)
+	if err != nil {
+		tx.Rollback()
+		return
+	}
+	InsertId, _ := res.LastInsertId()
+	fmt.Println(InsertId)
+	//err = s.AddUserRole(req.RoleIds, InsertId)
+	//if err != nil {
+	//	g.Log().Error(err)
+	//	err = gerror.New("设置用户权限失败")
+	//	tx.Rollback()
+	//	return
+	//}
+	//err = s.AddUserPost(req.PostIds, InsertId, tx)
+	if err != nil {
+		g.Log().Error(err)
+		err = gerror.New("设置用户岗位信息失败")
+		tx.Rollback()
+		return
+	}
+	tx.Commit()
+	return
+}
+
+// AddUserRole 添加用户角色信息
+func (s *UserService) AddUserRole(roleIds interface{}, userId int64) (err error) {
+	enforcer, e := service.Casbin.GetEnforcer()
+	if e != nil {
+		err = e
+		return
+	}
+	rule := gconv.Ints(roleIds)
+	for _, v := range rule {
+		_, err = enforcer.AddGroupingPolicy(fmt.Sprintf("%d", userId), fmt.Sprintf("%d", v))
+		if err != nil {
+			return
+		}
+	}
+	return
+}
+
 // EditUser 修改用户
-func (s *sysUser) EditUser(req *model.EditUserReq) (err error) {
-	if i, _ := dao.SysUser.Where("id!=? and mobile=?", req.UserId, req.Phonenumber).Count(); i != 0 {
+func (s *UserService) EditUser(req *model.EditUserReq) (err error) {
+	if i, _ := dao.SysUser.Where("id!=? and mobile=?", req.UserId, req.Phone).Count(); i != 0 {
 		err = gerror.New("手机号已经存在")
 		return
 	}
@@ -649,15 +474,14 @@ func (s *sysUser) EditUser(req *model.EditUserReq) (err error) {
 		return
 	}
 	userData.DeptId = req.DeptId
-	userData.UserStatus = req.Status
-	userData.Mobile = req.Phonenumber
+	userData.Status = req.Status
+	userData.Phone = req.Phone
 	userData.Sex = req.Sex
-	userData.UserEmail = req.Email
-	userData.UserNickname = req.NickName
+	userData.Email = req.Email
+	userData.NickName = req.NickName
 	userData.Remark = req.Remark
-	userData.IsAdmin = req.IsAdmin
-	_, err = dao.SysUser.TX(tx).FieldsEx(dao.SysUser.Columns.Id, dao.SysUser.Columns.CreatedAt,
-		dao.SysUser.Columns.DeletedAt, dao.SysUser.Columns.LastLoginTime).
+	_, err = dao.SysUser.TX(tx).FieldsEx(dao.SysUser.Columns.Id, dao.SysUser.Columns.CreatedTime,
+		dao.SysUser.Columns.DeletedTime, dao.SysUser.Columns.LoginDate).
 		WherePri(userData.Id).Update(userData)
 	if err != nil {
 		g.Log().Error(err)
@@ -674,7 +498,7 @@ func (s *sysUser) EditUser(req *model.EditUserReq) (err error) {
 		return
 	}
 	//设置用户岗位数据
-	err = s.AddUserPost(req.PostIds, gconv.Int64(req.UserId), tx)
+	err = s.AddUserPost(req.PostIds, int64(req.UserId), tx)
 	if err != nil {
 		g.Log().Error(err)
 		err = gerror.New("设置用户岗位信息失败")
@@ -686,7 +510,7 @@ func (s *sysUser) EditUser(req *model.EditUserReq) (err error) {
 }
 
 // EditUserRole 修改用户角色信息
-func (s *sysUser) EditUserRole(roleIds interface{}, userId int) (err error) {
+func (s *UserService) EditUserRole(roleIds interface{}, userId int) (err error) {
 	enforcer, e := service.Casbin.GetEnforcer()
 	if e != nil {
 		err = e
@@ -705,27 +529,27 @@ func (s *sysUser) EditUserRole(roleIds interface{}, userId int) (err error) {
 }
 
 // ResetUserPwd 重置用户密码
-func (s *sysUser) ResetUserPwd(req *model.SysUserResetPwdReq) error {
+func (s *UserService) ResetUserPwd(req *model.SysUserResetPwdReq) error {
 	salt := grand.S(10)
-	password := library.EncryptPassword(req.Password, salt)
+	password := utils.EncryptPassword(req.Password, salt)
 	_, err := dao.SysUser.WherePri(req.Id).Update(g.Map{
-		dao.SysUser.Columns.UserSalt:     salt,
-		dao.SysUser.Columns.UserPassword: password,
+		dao.SysUser.Columns.UserSalt: salt,
+		dao.SysUser.Columns.Password: password,
 	})
 	return err
 }
 
-func (s *sysUser) ChangeUserStatus(req *model.SysUserStatusReq) error {
+func (s *UserService) ChangeUserStatus(req *model.SysUserStatusReq) error {
 	_, err := dao.SysUser.WherePri(req.Id).Update(g.Map{
-		dao.SysUser.Columns.UserStatus: req.UserStatus,
+		dao.SysUser.Columns.Status: req.UserStatus,
 	})
 	return err
 }
 
-// DeleteUser 删除用户信息
-func (s *sysUser) DeleteUser(ctx context.Context, ids []int) error {
+// DeleteUserByIds 删除用户信息
+func (s *UserService) DeleteUserByIds(ctx context.Context, ids []int64) error {
 	return g.DB().Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error {
-		_, err := dao.SysUser.Ctx(ctx).TX(tx).Where(dao.SysUser.Columns.Id+" in(?)", ids).Delete()
+		_, err := s.Dao.Ctx(ctx).TX(tx).Where(dao.SysUser.Columns.Id+" in(?)", ids).Delete()
 		//删除对应权限
 		enforcer, err := service.Casbin.GetEnforcer()
 		if err == nil {
@@ -740,7 +564,7 @@ func (s *sysUser) DeleteUser(ctx context.Context, ids []int) error {
 }
 
 // SetAvatar 修改用户头像
-func (s *sysUser) SetAvatar(userId uint64, avatarUrl string) error {
+func (s *UserService) SetAvatar(userId int, avatarUrl string) error {
 	_, err := dao.SysUser.WherePri(userId).Unscoped().Update(g.Map{
 		dao.SysUser.Columns.Avatar: avatarUrl,
 	})
@@ -748,100 +572,100 @@ func (s *sysUser) SetAvatar(userId uint64, avatarUrl string) error {
 }
 
 // ProfileEdit 修改个人资料
-func (s *sysUser) ProfileEdit(req *model.ProfileUpReq) error {
+func (s *UserService) ProfileEdit(req *model.ProfileUpReq) error {
 	_, err := dao.SysUser.WherePri(req.UserId).Unscoped().Update(req)
 	return err
 }
 
 // ProfileUpdatePwd 修改个人密码
-func (s *sysUser) ProfileUpdatePwd(req *model.ProfileUpdatePwdReq) error {
+func (s *UserService) ProfileUpdatePwd(req *model.ProfileUpdatePwdReq) error {
 	userInfo, err := s.GetUserInfoById(req.UserId, true)
 	if err != nil {
 		return err
 	}
-	oldPassword := library.EncryptPassword(req.OldPassword, userInfo.UserSalt)
-	if oldPassword != userInfo.UserPassword {
+	oldPassword := utils.EncryptPassword(req.OldPassword, userInfo.UserSalt)
+	if oldPassword != userInfo.Password {
 		return errors.New("原始密码错误!")
 	}
 	salt := grand.S(10)
-	newPassword := library.EncryptPassword(req.NewPassword, salt)
+	newPassword := utils.EncryptPassword(req.NewPassword, salt)
 	_, err = dao.SysUser.WherePri(req.UserId).Unscoped().Update(g.Map{
-		dao.SysUser.Columns.UserSalt:     salt,
-		dao.SysUser.Columns.UserPassword: newPassword,
+		dao.SysUser.Columns.UserSalt: salt,
+		dao.SysUser.Columns.Password: newPassword,
 	})
 	return err
 }
 
 // GetDataWhere 获取数据权限判断条件
-func (s *sysUser) GetDataWhere(userInfo *dao.CtxUser, entity interface{}) (where g.Map, err error) {
-	whereJustMe := g.Map{} //本人数据权限
-	t := reflect.TypeOf(entity)
-	for i := 0; i < t.Elem().NumField(); i++ {
-		if t.Elem().Field(i).Name == "CreatedBy" {
-			//若存在用户id的字段,则生成判断数据权限的条件
-			//1、获取当前用户所属角色
-			allRoles := ([]*model.SysRole)(nil)
-			allRoles, err = SysRole.GetRoleList()
-			if err != nil {
-				return nil, err
-			}
-			roles := ([]*model.SysRole)(nil)
-			roles, err = s.GetAdminRole(userInfo.Id, allRoles)
-			if err != nil {
-				return nil, err
-			}
-			//2获取角色对应数据权限
-			deptIdArr := gset.New()
-			for _, role := range roles {
-				switch role.DataScope {
-				case 1: //全部数据权限
-					return
-				case 2: //自定数据权限
-					var deptIds []int64
-					deptIds, err = Dept.GetRoleDepts(gconv.Int64(role.Id))
-					if err != nil {
-						return
-					}
-					deptIdArr.Add(gconv.Interfaces(deptIds)...)
-				case 3: //本部门数据权限
-					deptIdArr.Add(gconv.Int64(userInfo.DeptId))
-				case 4: //本部门及以下数据权限
-					deptIdArr.Add(gconv.Int64(userInfo.DeptId))
-					//获取正常状态部门数据
-					depts := ([]*model.SysDept)(nil)
-					depts, err = Dept.GetList(&dao.SysDeptSearchParams{Status: "1"})
-					if err != nil {
-						return
-					}
-					var dList g.List
-					for _, d := range depts {
-						m := g.Map{
-							"id":    d.DeptId,
-							"pid":   d.ParentId,
-							"label": d.DeptName,
-						}
-						dList = append(dList, m)
-					}
-					l := library.FindSonByParentId(dList, gconv.Int(userInfo.DeptId), "pid", "id")
-					for _, li := range l {
-						deptIdArr.Add(gconv.Int64(li["id"]))
-					}
-				case 5: //仅本人数据权限
-					whereJustMe = g.Map{"user.id": userInfo.Id}
-				}
-			}
-			if deptIdArr.Size() > 0 {
-				where = g.Map{"user.dept_id": deptIdArr.Slice()}
-			} else if len(whereJustMe) > 0 {
-				where = whereJustMe
-			}
-		}
-	}
-	return
-}
+//func (s *sysUser) GetDataWhere(userInfo *dao.CtxUser, entity interface{}) (where g.Map, err error) {
+//	whereJustMe := g.Map{} //本人数据权限
+//	t := reflect.TypeOf(entity)
+//	for i := 0; i < t.Elem().NumField(); i++ {
+//		if t.Elem().Field(i).Name == "CreatedBy" {
+//			//若存在用户id的字段,则生成判断数据权限的条件
+//			//1、获取当前用户所属角色
+//			allRoles := ([]*model.SysRole)(nil)
+//			allRoles, err = SysRole.GetRoleList()
+//			if err != nil {
+//				return nil, err
+//			}
+//			roles := ([]*model.SysRole)(nil)
+//			roles, err = s.GetAdminRole(userInfo.Id, allRoles)
+//			if err != nil {
+//				return nil, err
+//			}
+//			//2获取角色对应数据权限
+//			deptIdArr := gset.New()
+//			for _, role := range roles {
+//				switch role.DataScope {
+//				case 1: //全部数据权限
+//					return
+//				case 2: //自定数据权限
+//					var deptIds []int
+//					deptIds, err = Dept.GetRoleDepts(gconv.int(role.Id))
+//					if err != nil {
+//						return
+//					}
+//					deptIdArr.Add(gconv.Interfaces(deptIds)...)
+//				case 3: //本部门数据权限
+//					deptIdArr.Add(gconv.int(userInfo.DeptId))
+//				case 4: //本部门及以下数据权限
+//					deptIdArr.Add(gconv.int(userInfo.DeptId))
+//					//获取正常状态部门数据
+//					depts := ([]*model.SysDept)(nil)
+//					depts, err = Dept.GetList(&dao.SysDeptSearchParams{Status: "1"})
+//					if err != nil {
+//						return
+//					}
+//					var dList g.List
+//					for _, d := range depts {
+//						m := g.Map{
+//							"id":    d.DeptId,
+//							"pid":   d.ParentId,
+//							"label": d.DeptName,
+//						}
+//						dList = append(dList, m)
+//					}
+//					l := library.FindSonByParentId(dList, gconv.Int(userInfo.DeptId), "pid", "id")
+//					for _, li := range l {
+//						deptIdArr.Add(gconv.int(li["id"]))
+//					}
+//				case 5: //仅本人数据权限
+//					whereJustMe = g.Map{"user.id": userInfo.Id}
+//				}
+//			}
+//			if deptIdArr.Size() > 0 {
+//				where = g.Map{"user.dept_id": deptIdArr.Slice()}
+//			} else if len(whereJustMe) > 0 {
+//				where = whereJustMe
+//			}
+//		}
+//	}
+//	return
+//}
 
 // GetUsers 通过用户ids查询多个用户信息
-func (s *sysUser) GetUsers(ids []int) (users []*model.SysUserRes, err error) {
+func (s *UserService) GetUsers(ids []int) (users []*model.SysUserRes, err error) {
 	if len(ids) == 0 {
 		return
 	}

+ 4 - 1
opms_admin/go.mod

@@ -5,9 +5,12 @@ go 1.16
 require (
 	dashoo.cn/common_definition v0.0.0
 	dashoo.cn/opms_libary v0.0.0
+	github.com/casbin/casbin/v2 v2.57.0
+	github.com/go-redis/redis/v8 v8.11.5 // indirect
+	github.com/gogf/gcache-adapter v0.1.2
 	github.com/gogf/gf v1.16.4
 	github.com/smallnest/rpcx v1.6.10
-	github.com/xuri/excelize/v2 v2.6.1 // indirect
+	github.com/xuri/excelize/v2 v2.6.1
 )
 
 replace dashoo.cn/opms_libary => ../opms_libary

+ 2 - 0
opms_admin/main.go

@@ -18,6 +18,8 @@ func main() {
 	s := micro_srv.CreateAndInitService(basePath)
 	// 注册服务对象
 	s.RegisterName("Auth", new(handler.Auth), "")
+	s.RegisterName("User", new(handler.User), "")
+	s.RegisterName("Menu", new(handler.Menu), "")
 	s.RegisterName("Role", new(handler.RoleHandler), "")
 
 	// 注册文件处理Service对象

+ 1 - 1
opms_libary/myerrors/error.go

@@ -118,7 +118,7 @@ func CheckError(err error, msg ...string) (bool, error, int32, string) {
 			return true, err, 500, err.Error()
 		}
 	}
-	return false, nil, 200, ""
+	return false, nil, 200, "操作成功"
 }
 
 // 提示性异常,不进行通常错误处理(不输出日志)

+ 203 - 0
opms_libary/utils/convert.go

@@ -0,0 +1,203 @@
+package utils
+
+import (
+	"container/list"
+	"encoding/json"
+	"strings"
+
+	"github.com/gogf/gf/container/gvar"
+	"github.com/gogf/gf/util/gconv"
+)
+
+// 将带分隔符的字符串切成int数组
+func ToIntArray(str string, split ...string) []int {
+	splitChar := ","
+	if len(split) > 0 {
+		splitChar = split[0]
+	}
+	result := make([]int, 0)
+	if str == "" {
+		return result
+	}
+
+	arr := strings.Split(str, splitChar)
+
+	if len(arr) > 0 {
+		for i := range arr {
+			if arr[i] != "" {
+				result = append(result, gconv.Int(arr[i]))
+			}
+		}
+	}
+	return result
+}
+
+// 将带分隔符的字符串切成int64数组
+func ToInt64Array(str string, split ...string) []int64 {
+	splitChar := ","
+	if len(split) > 0 {
+		splitChar = split[0]
+	}
+	result := make([]int64, 0)
+	if str == "" {
+		return result
+	}
+
+	arr := strings.Split(str, splitChar)
+
+	if len(arr) > 0 {
+		for i := range arr {
+			if arr[i] != "" {
+				result = append(result, gconv.Int64(arr[i]))
+			}
+		}
+	}
+	return result
+}
+
+// 将带分隔符的字符串切成string数组
+func ToStringArray(str string, split ...string) []string {
+	if str == "" {
+		return nil
+	}
+	splitChar := ","
+	if len(split) > 0 {
+		splitChar = split[0]
+	}
+	result := strings.Split(str, splitChar)
+	return result
+}
+
+// 将数据表查询返回的ID数据转换成带分隔符的Ids字符串,形如:1,2,3
+func ToIdsString(array []*gvar.Var, split ...string) string {
+	splitChar := ","
+	if len(split) > 0 {
+		splitChar = split[0]
+	}
+	result := ""
+	for _, v := range array {
+		result = result + v.String() + splitChar
+	}
+	result = result[0 : len(result)-1]
+	return result
+}
+
+// 将数据表查询返回的ID数组(整数数组,支持int,int32,int64)数据转换成带分隔符的Ids字符串,形如:1,2,3
+func IntArrayToIdsString(array interface{}, split ...string) string {
+	if array == nil {
+		return ""
+	}
+
+	splitChar := ","
+	if len(split) > 0 {
+		splitChar = split[0]
+	}
+
+	result := ""
+	switch value := array.(type) {
+	case []int:
+		if len(value) == 0 {
+			return ""
+		}
+		for _, v := range value {
+			result = result + gconv.String(v) + splitChar
+		}
+	case []int32:
+		if len(value) == 0 {
+			return ""
+		}
+		for _, v := range value {
+			result = result + gconv.String(v) + splitChar
+		}
+	case []int64:
+		if len(value) == 0 {
+			return ""
+		}
+		for _, v := range value {
+			result = result + gconv.String(v) + splitChar
+		}
+	case []string:
+		if len(value) == 0 {
+			return ""
+		}
+		for _, v := range value {
+			result = result + v + splitChar
+		}
+	}
+
+	result = result[0 : len(result)-1]
+	return result
+}
+
+// 将数据表查询返回的ID数据转换成带分隔符的Ids字符串,形如:1,2,3
+func Int64ArrayToIdsString(array []int64, split ...string) string {
+	splitChar := ","
+	if len(split) > 0 {
+		splitChar = split[0]
+	}
+	result := ""
+	for _, v := range array {
+		result = result + gconv.String(v) + splitChar
+	}
+	result = result[0 : len(result)-1]
+	return result
+}
+
+// 过滤收尾有分隔符的数字字符串
+func ReplaceHeadAndEndStr(str string, split ...string) string {
+	splitChar := ","
+	if len(split) > 0 {
+		splitChar = split[0]
+	}
+	result := ""
+	arr := strings.Split(str, splitChar)
+	if len(arr) <= 0 {
+		return result
+	}
+
+	for i := range arr {
+		if arr[i] != "" {
+			if i == 0 {
+				result = arr[i]
+			} else {
+				result += "," + arr[i]
+			}
+		}
+	}
+	return result
+}
+
+// ToJsonStr 对象转字符串
+func ToJsonString(data interface{}) (string, error) {
+	result, err := json.Marshal(data)
+	return string(result), err
+}
+
+// Json字符串转对象
+func JsonToStruct(source string, destination interface{}) error {
+	err := json.Unmarshal([]byte(source), destination)
+	return err
+}
+
+// Json字符串转Map
+func JsonToMap(source string) (map[string]string, error) {
+	resultMap := make(map[string]string)
+	err := json.Unmarshal([]byte(source), &resultMap)
+	if err != nil {
+		return nil, err
+	}
+	return resultMap, nil
+}
+
+// list对象转数组
+func ListToArray(list *list.List) []interface{} {
+	var len = list.Len()
+	if len == 0 {
+		return nil
+	}
+	var arr []interface{}
+	for e := list.Front(); e != nil; e = e.Next() {
+		arr = append(arr, e.Value)
+	}
+	return arr
+}