فهرست منبع

新增系统用户批量初始化

317699326@qq.com 4 ماه پیش
والد
کامیت
b06a0369cd
9فایلهای تغییر یافته به همراه416 افزوده شده و 7 حذف شده
  1. 40 0
      controllers/admin.go
  2. 56 7
      models/admin.go
  3. 12 0
      models/db.go
  4. 24 0
      models/sys_department.go
  5. 27 0
      models/sys_group.go
  6. 37 0
      models/sys_role.go
  7. 9 0
      routers/commentsRouter.go
  8. 5 0
      routers/router.go
  9. 206 0
      services/admin.go

+ 40 - 0
controllers/admin.go

@@ -0,0 +1,40 @@
+package controllers
+
+import (
+	"eta/eta_data_init/models"
+	"eta/eta_data_init/services"
+	"fmt"
+	beego "github.com/beego/beego/v2/server/web"
+)
+
+// DataInitController
+// Operations about Users
+type AdminInitController struct {
+	beego.Controller
+}
+
+// Base
+// @Title 初始化系统用户
+// @Description 初始化系统用户
+// @Param   FileName    query   string true       "文件名称"
+// @Success Ret=200
+// @router /base [get]
+func (this *AdminInitController) Base() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	fileName := this.GetString("FileName")
+	if fileName == "" {
+		br.Msg = "文件名称不能为空"
+		return
+	}
+
+	filePath := "/docs/" + fileName
+	fmt.Println("filePath:" + filePath)
+	services.InitAdmin(filePath)
+	br.Ret = 200
+	br.Msg = "初始化成功"
+}

+ 56 - 7
models/admin.go

@@ -1,18 +1,53 @@
 package models
 package models
 
 
-import "github.com/beego/beego/v2/client/orm"
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
 
 
 type Admin struct {
 type Admin struct {
-	AdminId   int    `description:"系统用户id"`
-	AdminName string `description:"系统用户名称"`
-	RealName  string `description:"系统用户姓名"`
-	Mobile    string `description:"手机号"`
-	Email     string `description:"邮箱"`
+	AdminId                   int    `orm:"column(admin_id);pk" description:"系统用户id"`
+	AdminName                 string `description:"系统用户名称"`
+	AdminAvatar               string `description:"用户头像"`
+	RealName                  string `description:"系统用户姓名"`
+	Password                  string `json:"-"`
+	LastUpdatedPasswordTime   string `json:"-"`
+	Enabled                   int
+	Email                     string `description:"系统用户邮箱"`
+	LastLoginTime             string
+	CreatedTime               time.Time
+	LastUpdatedTime           string
+	Role                      string    `description:"系统用户角色"`
+	Mobile                    string    `description:"手机号"`
+	RoleType                  int       `description:"角色类型:1需要录入指标,0:不需要"`
+	RoleId                    int       `description:"角色ID"`
+	RoleName                  string    `description:"角色名称"`
+	RoleTypeCode              string    `description:"角色类型编码"`
+	DepartmentId              int       `description:"部门id"`
+	DepartmentName            string    `description:"部门名称"`
+	GroupId                   int       `description:"分组id"`
+	GroupName                 string    `description:"分组名称"`
+	Authority                 int       `description:"管理权限,0:无,1:部门负责人,2:小组负责人,或者ficc销售主管,3:超级管理员,4:ficc销售组长"`
+	Position                  string    `description:"职位"`
+	DisableTime               time.Time `description:"禁用时间"`
+	ChartPermission           int8      `description:"图表权限id"`
+	OpenId                    string    `description:"弘则部门公众号的openid"`
+	UnionId                   string    `description:"微信公众平台唯一标识"`
+	EdbPermission             int8      `description:"指标库操作权限,0:只能操作 自己的,1:所有指标可操作"`
+	MysteelChemicalPermission int8      `description:"钢联化工指标操作权限,0:只能操作 自己的,1:所有指标可操作"`
+	PredictEdbPermission      int8      `description:"预测指标库操作权限,0:只能操作 自己的,1:所有预测指标可操作"`
+	Province                  string    `description:"省"`
+	ProvinceCode              string    `description:"省编码"`
+	City                      string    `description:"市"`
+	CityCode                  string    `description:"市编码"`
+	EmployeeId                string    `description:"员工工号(钉钉/每刻报销)"`
+	TelAreaCode               string    `description:"手机区号"`
+	IsLdap                    int       `description:"是否为域用户:0-系统账户;1-域用户"`
 }
 }
 
 
 // GetSysAdminList 获取系统用户列表
 // GetSysAdminList 获取系统用户列表
 func GetSysAdminList(cond string, pars []interface{}) (items []*Admin, err error) {
 func GetSysAdminList(cond string, pars []interface{}) (items []*Admin, err error) {
-	o := orm.NewOrmUsingDB("eta")
+	o := orm.NewOrm()
 	sql := `SELECT * FROM admin WHERE 1=1 `
 	sql := `SELECT * FROM admin WHERE 1=1 `
 	if cond != "" {
 	if cond != "" {
 		sql += cond
 		sql += cond
@@ -20,3 +55,17 @@ func GetSysAdminList(cond string, pars []interface{}) (items []*Admin, err error
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 	return
 }
 }
+
+func GetSysAdminCount(adminName string) (count int, err error) {
+	sql := `SELECT COUNT(1) AS count FROM admin WHERE admin_name=? `
+	o := orm.NewOrm()
+	err = o.Raw(sql, adminName).QueryRow(&count)
+	return
+}
+
+func AddAdmin(item *Admin) (err error) {
+	o := orm.NewOrm()
+	adminId, err := o.Insert(item)
+	item.AdminId = int(adminId)
+	return
+}

+ 12 - 0
models/db.go

@@ -9,14 +9,26 @@ import (
 
 
 func init() {
 func init() {
 	if utils.MYSQL_URL_ETA != "" {
 	if utils.MYSQL_URL_ETA != "" {
+		_ = orm.RegisterDataBase("default", "mysql", utils.MYSQL_URL_ETA)
+		orm.SetMaxIdleConns("default", 50)
+		orm.SetMaxOpenConns("default", 100)
+
+		orm.Debug = true
+		orm.DebugLog = orm.NewLog(utils.Binlog)
+
 		_ = orm.RegisterDataBase("eta", "mysql", utils.MYSQL_URL_ETA)
 		_ = orm.RegisterDataBase("eta", "mysql", utils.MYSQL_URL_ETA)
 		orm.SetMaxIdleConns("eta", 50)
 		orm.SetMaxIdleConns("eta", 50)
 		orm.SetMaxOpenConns("eta", 100)
 		orm.SetMaxOpenConns("eta", 100)
 		etaDb, _ := orm.GetDB("eta")
 		etaDb, _ := orm.GetDB("eta")
 		etaDb.SetConnMaxLifetime(10 * time.Minute)
 		etaDb.SetConnMaxLifetime(10 * time.Minute)
 
 
+		orm.RegisterModel(
+			new(Admin),
+		)
+
 		orm.Debug = true
 		orm.Debug = true
 		orm.DebugLog = orm.NewLog(utils.Binlog)
 		orm.DebugLog = orm.NewLog(utils.Binlog)
+
 	}
 	}
 	if utils.MYSQL_URL_DATA != "" {
 	if utils.MYSQL_URL_DATA != "" {
 		_ = orm.RegisterDataBase("data", "mysql", utils.MYSQL_URL_DATA)
 		_ = orm.RegisterDataBase("data", "mysql", utils.MYSQL_URL_DATA)

+ 24 - 0
models/sys_department.go

@@ -0,0 +1,24 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type SysDepartmentAddReq struct {
+	DepartmentName string `description:"部门名称"`
+}
+
+type SysDepartment struct {
+	DepartmentId   int       `orm:"column(department_id);pk" description:"部门Id"`
+	DepartmentName string    `description:"部门名称"`
+	Sort           int       `description:"排序"`
+	CreateTime     time.Time `description:"创建时间"`
+}
+
+func GetSysDepartmentAll() (items []*SysDepartment, err error) {
+	sql := `SELECT * FROM sys_department `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 27 - 0
models/sys_group.go

@@ -0,0 +1,27 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type SysGroupAddReq struct {
+	DepartmentId int    `description:"部门Id"`
+	GroupName    string `description:"分组名称,多个用英文逗号隔开"`
+}
+
+type SysGroup struct {
+	GroupId      int       `orm:"column(group_id);pk" description:"分组ID"`
+	DepartmentId int       `description:"部门Id"`
+	ParentId     int       `description:"父级Id"`
+	GroupName    string    `description:"分组名称"`
+	Sort         int       `description:"排序"`
+	CreateTime   time.Time `description:"创建时间"`
+}
+
+func GetSysGroupAll() (list []*SysGroup, err error) {
+	sql := `SELECT * FROM sys_group `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}

+ 37 - 0
models/sys_role.go

@@ -0,0 +1,37 @@
+package models
+
+import (
+	"time"
+
+	"github.com/beego/beego/v2/client/orm"
+)
+
+type SysRoleAddReq struct {
+	RoleName string `description:"角色名称"`
+	RoleType string `description:"角色类型"`
+}
+
+type SysRole struct {
+	RoleId       int       `orm:"column(role_id);pk" description:"角色ID"`
+	RoleName     string    `description:"角色名称"`
+	RoleType     string    `description:"角色类型"`
+	RoleTypeCode string    `description:"角色类型编码"`
+	CreateTime   time.Time `description:"创建时间"`
+	ModifyTime   time.Time
+}
+
+type SysRoleItem struct {
+	RoleId       int       `orm:"column(role_id);pk" description:"角色ID"`
+	RoleName     string    `description:"角色名称"`
+	RoleType     string    `description:"角色类型"`
+	RoleTypeCode string    `description:"角色类型编码"`
+	CreateTime   time.Time `description:"创建时间"`
+	RoleLevel    int       `description:"角色等级:0-表示一级角色,每个账号只能绑定一个一级角色 ,1-表示二级角色,每个账号可以绑定多个二级 角色"`
+}
+
+func GetSysRoleAll() (items []*SysRoleItem, err error) {
+	sql := `SELECT * FROM sys_role `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 9 - 0
routers/commentsRouter.go

@@ -34,6 +34,15 @@ func init() {
             Filters: nil,
             Filters: nil,
             Params: nil})
             Params: nil})
 
 
+    beego.GlobalControllerRouter["eta/eta_data_init/controllers:AdminInitController"] = append(beego.GlobalControllerRouter["eta/eta_data_init/controllers:AdminInitController"],
+        beego.ControllerComments{
+            Method: "Base",
+            Router: `/base`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_data_init/controllers:DataFixController"] = append(beego.GlobalControllerRouter["eta/eta_data_init/controllers:DataFixController"],
     beego.GlobalControllerRouter["eta/eta_data_init/controllers:DataFixController"] = append(beego.GlobalControllerRouter["eta/eta_data_init/controllers:DataFixController"],
         beego.ControllerComments{
         beego.ControllerComments{
             Method: "FixTableV1",
             Method: "FixTableV1",

+ 5 - 0
routers/router.go

@@ -31,6 +31,11 @@ func init() {
 				&xiangyu.XyController{},
 				&xiangyu.XyController{},
 			),
 			),
 		),
 		),
+		beego.NSNamespace("/admin_init",
+			beego.NSInclude(
+				&controllers.AdminInitController{},
+			),
+		),
 	)
 	)
 	beego.AddNamespace(ns)
 	beego.AddNamespace(ns)
 }
 }

+ 206 - 0
services/admin.go

@@ -0,0 +1,206 @@
+package services
+
+import (
+	"eta/eta_data_init/models"
+	"eta/eta_data_init/utils"
+	"fmt"
+	"github.com/xuri/excelize/v2"
+	"os"
+	"path/filepath"
+	"strings"
+	"time"
+)
+
+// InitAdmin 初始化系统用户数据
+func InitAdmin(dataPath string) {
+	var err error
+
+	defer func() {
+		if err != nil {
+			fmt.Println("InitAdmin Err:" + err.Error())
+			utils.FileLog.Info("InitAdmin Err: " + err.Error())
+		}
+	}()
+
+	//读取excel
+	path, err := filepath.Abs(os.Args[0])
+	if err != nil {
+		fmt.Println(err)
+	}
+
+	dir := filepath.Dir(path)
+	fmt.Println("dir:" + dir)
+	dataPath = dir + dataPath
+	fmt.Println("dataPath:" + dataPath)
+	f, err := excelize.OpenFile(dataPath)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	defer func() {
+		if err := f.Close(); err != nil {
+			fmt.Println(err)
+		}
+	}()
+	rows, err := f.GetRows("Sheet1")
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	fmt.Println("rows len:", len(rows))
+
+	mobileMap := make(map[string]*models.Admin)
+	emailMap := make(map[string]*models.Admin)
+	userMap := make(map[string]*models.Admin)
+
+	deptMap := make(map[string]*models.SysDepartment)
+	groupMap := make(map[string]*models.SysGroup)
+
+	admins, err := models.GetSysAdminList(``, make([]interface{}, 0))
+	if err != nil {
+		err = fmt.Errorf("GetSysAdminList err: %s", err.Error())
+		return
+	}
+	for _, v := range admins {
+		if v.Mobile != "" {
+			mobileMap[v.Mobile] = v
+		}
+		if v.Email != "" {
+			emailMap[v.Email] = v
+		}
+		userMap[v.AdminName] = v
+	}
+
+	//获取部门
+	deptList, err := models.GetSysDepartmentAll()
+	if err != nil {
+		fmt.Println("GetSysDepartmentAll err:" + err.Error())
+		return
+	}
+	for _, v := range deptList {
+		deptMap[v.DepartmentName] = v
+	}
+	//获取分组
+	groupList, err := models.GetSysGroupAll()
+	if err != nil {
+		fmt.Println("GetSysGroupAll err:" + err.Error())
+		return
+	}
+	for _, v := range groupList {
+		groupMap[v.GroupName] = v
+	}
+
+	//获取角色
+	roleMap := make(map[string]*models.SysRoleItem)
+	//获取分组
+	roleList, err := models.GetSysRoleAll()
+	if err != nil {
+		fmt.Println("GetSysRoleAll err:" + err.Error())
+		return
+	}
+	for _, v := range roleList {
+		roleMap[v.RoleName] = v
+	}
+
+	for rk, row := range rows {
+
+		//if rk > 3 {
+		//	return
+		//}
+
+		if rk > 0 {
+			var adminName, password, realName, telAreaCode, mobile, departmentName, email, roleName string
+			for ck, colCell := range row {
+				colCell = strings.TrimSpace(colCell)
+				switch ck {
+				case 0:
+					adminName = colCell
+				case 1:
+					password = colCell
+				case 2:
+					realName = colCell
+				case 3:
+					telAreaCode = colCell
+				case 4:
+					mobile = colCell
+				case 5:
+					departmentName = colCell
+				case 6:
+					email = colCell
+				case 8:
+					roleName = colCell
+				}
+			}
+
+			if adminName != "" &&
+				realName != "" {
+
+				fmt.Println(adminName, password, realName, telAreaCode, mobile, departmentName, email, roleName)
+
+				count, err := models.GetSysAdminCount(adminName)
+				if err != nil {
+					fmt.Println("判断用户是否存在失败,Err:" + err.Error())
+					return
+				}
+				if count > 0 { //用户已存在
+					continue
+				} else { //新增
+
+					pass := utils.MD5(password)
+
+					admin := new(models.Admin)
+					admin.AdminName = adminName
+					admin.RealName = realName
+					admin.Password = pass
+
+					admin.LastUpdatedPasswordTime = time.Now().Format(utils.FormatDateTime)
+					admin.Enabled = 1
+					admin.LastLoginTime = time.Now().Format(utils.FormatDateTime)
+					admin.CreatedTime = time.Now()
+					admin.LastUpdatedTime = time.Now().Format(utils.FormatDateTime)
+					admin.Mobile = mobile
+					admin.RoleType = 0
+					if role, ok := roleMap[roleName]; ok {
+						admin.RoleId = role.RoleId
+						admin.RoleTypeCode = role.RoleTypeCode
+					} else {
+						fmt.Println("角色不存在:" + roleName)
+						return
+					}
+					admin.RoleName = roleName
+
+					var groupName, deptName string
+					deptArr := strings.Split(departmentName, "/")
+					fmt.Println(deptArr)
+					if len(deptArr) < 2 {
+						fmt.Println("部门信息错误,至少两级")
+						return
+					}
+					deptName = deptArr[0]
+					groupName = deptArr[1]
+
+					if dept, ok := deptMap[deptName]; ok {
+						admin.DepartmentId = dept.DepartmentId
+					}
+
+					admin.DepartmentName = deptName
+
+					if group, ok := groupMap[groupName]; ok {
+						admin.GroupId = group.GroupId
+						admin.GroupName = groupName
+					}
+					admin.Email = email
+
+					admin.TelAreaCode = telAreaCode
+					admin.IsLdap = 0
+					err = models.AddAdmin(admin)
+					if err != nil {
+						fmt.Println("新增失败,Err:" + err.Error())
+						return
+					}
+				}
+
+			}
+		}
+	}
+}