xyxie 10 місяців тому
батько
коміт
8398bda0db

+ 106 - 0
controllers/admin.go

@@ -0,0 +1,106 @@
+package controllers
+
+import (
+	"encoding/json"
+	"eta/eta_forum_hub/models"
+	"eta/eta_forum_hub/models/system"
+	"eta/eta_forum_hub/services"
+	"eta/eta_forum_hub/utils"
+)
+
+type AdminController struct {
+	BaseCommonController
+}
+
+// Save
+// @Title 新增或者编辑系统用户
+// @Description 新增系统用户接口
+// @Param	request	body system.SysuserAddReq true "type json string"
+// @Success 200 新增成功
+// @router /save [post]
+func (this *AdminController) Save() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req system.Admin
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.AdminName == "" {
+		br.Msg = "请输入用户名"
+		br.IsSendEmail = false
+		return
+	}
+	if req.BusinessCode == "" {
+		br.Msg = "请输入商户编码"
+		br.IsSendEmail = false
+		return
+	}
+	err, isSendEmail := services.AddOrUpdateAdmin(req)
+	if err != nil {
+		br.Msg = "新增或者更新用户失败"
+		br.ErrMsg = "新增或者更新用户失败, Err:" + err.Error()
+		br.IsSendEmail = isSendEmail
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "新增成功"
+}
+
+// Delete
+// @Title 删除系统用户
+// @Description 删除系统用户接口
+// @Param	request	body system.AdminDeleteReq true "type json string"
+// @Success 200 删除成功
+// @router /delete [post]
+func (this *AdminController) Delete() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req system.AdminDeleteReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.AdminName == "" {
+		br.Msg = "请选择用户"
+		return
+	}
+	if req.BusinessCode == "" {
+		br.Msg = "请选择商户"
+		return
+	}
+
+	adminInfo, err := system.GetAdminByAdminNameAndBusinessCode(req.AdminName, req.BusinessCode)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Msg = "用户不存在"
+			return
+		}
+		br.Msg = "获取用户信息失败"
+		br.ErrMsg = "获取用户信息失败,Err:" + err.Error()
+		return
+	}
+
+	err = system.DeleteSysuser(adminInfo.AdminId)
+	if err != nil {
+		br.Msg = "删除失败"
+		br.ErrMsg = "删除失败,Err:" + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "删除成功"
+}

+ 3 - 2
controllers/auth.go

@@ -4,6 +4,7 @@ import (
 	"encoding/base64"
 	"encoding/json"
 	"eta/eta_forum_hub/models"
+	"eta/eta_forum_hub/models/system"
 	"eta/eta_forum_hub/utils"
 	"fmt"
 	"github.com/beego/beego/v2/server/web"
@@ -26,7 +27,7 @@ func (this *AuthController) CreateAuthCode() {
 		this.ServeJSON()
 	}()
 
-	var req models.CreateAuthCodeReq
+	var req system.CreateAuthCodeReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
@@ -41,7 +42,7 @@ func (this *AuthController) CreateAuthCode() {
 	key := fmt.Sprint(prefix[req.Source], str)
 	// 是否已生成但未消费
 	exist, _ := utils.Rc.RedisString(key)
-	var data models.CreateAuthCodeResp
+	var data system.CreateAuthCodeResp
 	data.AuthCode = str
 	if exist != "" {
 		br.Ret = 200

+ 66 - 7
models/admin.go → models/system/admin.go

@@ -1,4 +1,4 @@
-package models
+package system
 
 import (
 	"eta/eta_forum_hub/utils"
@@ -64,6 +64,7 @@ type Admin struct {
 	EmployeeId                string    `description:"员工工号(钉钉/每刻报销)"`
 	TelAreaCode               string    `description:"手机区号"`
 	IsLdap                    int       `description:"是否为域用户:0-系统账户;1-域用户"`
+	BusinessCode              string    `description:"商家编码"`
 }
 
 // Update 更新用户基础信息
@@ -73,6 +74,13 @@ func (item *Admin) Update(cols []string) (err error) {
 	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 CheckSysUser(userName, password string) (item *Admin, err error) {
 	sql := ` SELECT a.*,b.role_type_code FROM admin AS a
 			 INNER JOIN sys_role AS b ON a.role_id=b.role_id WHERE a.admin_name=? AND a.password=? LIMIT 1`
@@ -184,21 +192,42 @@ func GetSysUserByEmail(email string) (item *Admin, err error) {
 	return
 }
 
-// GetSysUserByAdminName 账号获取用户
-func GetSysUserByAdminName(adminName string) (item *Admin, err error) {
+// GetAdminByAdminName 账号获取用户
+func GetAdminByAdminName(adminName string) (item *Admin, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
-				a.*, b.role_type_code
+				*
 			FROM
-				admin AS a
-			INNER JOIN sys_role AS b ON a.role_id = b.role_id
+				admin 
 			WHERE
-				a.admin_name = ?
+				admin_name = ?
 			LIMIT 1`
 	err = o.Raw(sql, adminName).QueryRow(&item)
 	return
 }
 
+// GetAdminByAdminNameAndBusinessCode 账号获取用户
+func GetAdminByAdminNameAndBusinessCode(adminName, businessCode string) (item *Admin, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+				*
+			FROM
+				admin 
+			WHERE
+				admin_name = ?
+				and business_code = ?
+			LIMIT 1`
+	err = o.Raw(sql, adminName, businessCode).QueryRow(&item)
+	return
+}
+
+func DeleteSysuser(adminId int) (err error) {
+	sql := `DELETE FROM admin WHERE admin_id=? `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, adminId).Exec()
+	return
+}
+
 type CreateAuthCodeReq struct {
 	Source    int `description:"来源: 1-CRM; 2-ETA"`
 	AdminName string
@@ -207,3 +236,33 @@ type CreateAuthCodeReq struct {
 type CreateAuthCodeResp struct {
 	AuthCode string `json:"auth_code" description:"登录凭证"`
 }
+
+func AddAdmin(item *Admin) (err error) {
+	o := orm.NewOrm()
+	adminId, err := o.Insert(item)
+	item.AdminId = int(adminId)
+	return
+}
+
+func AddOrUpdateAdmin(item *Admin) (err error) {
+	o := orm.NewOrm()
+	adminId, err := o.InsertOrUpdate(item)
+	item.AdminId = int(adminId)
+	return
+}
+
+// GetSysAdminCountByMobile 查询系统中是否存在该手机号(如果有传入用户id,那么排除该用户)
+func GetSysAdminCountByMobile(mobile string, adminId int) (count int, err error) {
+	sql := `SELECT COUNT(1) AS count FROM admin WHERE mobile=? `
+	if adminId > 0 {
+		sql += ` AND admin_id != ` + fmt.Sprint(adminId)
+	}
+	o := orm.NewOrm()
+	err = o.Raw(sql, mobile).QueryRow(&count)
+	return
+}
+
+type AdminDeleteReq struct {
+	AdminName    string
+	BusinessCode string `description:"商家编码"`
+}

+ 18 - 0
routers/commentsRouter.go

@@ -7,6 +7,24 @@ import (
 
 func init() {
 
+    beego.GlobalControllerRouter["eta/eta_forum_hub/controllers:AdminController"] = append(beego.GlobalControllerRouter["eta/eta_forum_hub/controllers:AdminController"],
+        beego.ControllerComments{
+            Method: "Delete",
+            Router: `/delete`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_forum_hub/controllers:AdminController"] = append(beego.GlobalControllerRouter["eta/eta_forum_hub/controllers:AdminController"],
+        beego.ControllerComments{
+            Method: "Save",
+            Router: `/save`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_forum_hub/controllers:AuthController"] = append(beego.GlobalControllerRouter["eta/eta_forum_hub/controllers:AuthController"],
         beego.ControllerComments{
             Method: "CreateAuthCode",

+ 5 - 0
routers/router.go

@@ -24,6 +24,11 @@ func init() {
 				&controllers.AuthController{},
 			),
 		),
+		web.NSNamespace("/admin",
+			web.NSInclude(
+				&controllers.AdminController{},
+			),
+		),
 	)
 	web.AddNamespace(ns)
 }

+ 121 - 0
services/admin.go

@@ -0,0 +1,121 @@
+package services
+
+import (
+	"eta/eta_forum_hub/models/system"
+	"eta/eta_forum_hub/utils"
+	"fmt"
+	"strings"
+	"time"
+)
+
+// 新增或者更新用户
+func AddOrUpdateAdmin(req system.Admin) (err error, isSendEmail bool) {
+	isSendEmail = true
+	isAdd := true
+	admin := new(system.Admin)
+	admin, e := system.GetAdminByAdminName(req.AdminName)
+	if e != nil {
+		if e.Error() != utils.ErrNoRow() {
+			err = fmt.Errorf("获取数据失败,%v", e)
+			return
+		}
+	}
+	if e == nil && admin.AdminId > 0 {
+		isAdd = false
+		if admin.BusinessCode != req.BusinessCode {
+			err = fmt.Errorf("商户编码不同,不允许更新")
+			return
+		}
+	}
+	// 手机号和邮箱必填一个
+	req.Mobile = strings.TrimSpace(req.Mobile)
+	req.Email = strings.TrimSpace(req.Email)
+	if req.Mobile == "" && req.Email == "" {
+		err = fmt.Errorf("至少输入一个手机号或邮箱")
+		return
+	}
+	if req.Mobile != "" {
+		if req.TelAreaCode == "86" {
+			if !utils.ValidateMobileFormatat(req.Mobile) {
+				err = fmt.Errorf("手机号格式有误, 请检查")
+				return
+			}
+		}
+
+		mobileCount, e := system.GetSysAdminCountByMobile(req.Mobile, 0)
+		if e != nil {
+			err = fmt.Errorf("判断手机号是否存在失败,%w", err)
+			return
+		}
+		if mobileCount > 0 {
+			err = fmt.Errorf("手机号已存在,请重新填写")
+			isSendEmail = false
+			return
+		}
+	}
+	if req.Email != "" {
+		if !utils.ValidateEmailFormatat(req.Email) {
+			err = fmt.Errorf("邮箱格式有误, 请检查")
+			return
+		}
+		emailUser, e := system.GetSysUserByEmail(req.Email)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = fmt.Errorf("邮箱获取用户失败,%w", e)
+			return
+		}
+		if emailUser != nil && emailUser.AdminId > 0 {
+			err = fmt.Errorf("邮箱已存在, 请重新填写")
+			return
+		}
+	}
+
+	// 员工工号
+	req.EmployeeId = strings.TrimSpace(req.EmployeeId)
+
+	admin.AdminName = req.AdminName
+	admin.RealName = req.RealName
+	admin.Password = req.Password
+	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 = req.Mobile
+	admin.RoleType = req.RoleType
+	admin.RoleId = req.RoleId
+	admin.RoleName = req.RoleName
+	admin.RoleTypeCode = req.RoleTypeCode
+	admin.DepartmentId = req.DepartmentId
+	admin.DepartmentName = req.DepartmentName
+	admin.AdminAvatar = req.AdminAvatar
+	admin.GroupId = req.GroupId
+	admin.GroupName = req.GroupName
+
+	admin.Role = req.Role
+	admin.EmployeeId = req.EmployeeId
+	admin.Email = req.Email
+	admin.Authority = req.Authority
+	admin.Position = req.Position
+	admin.Province = req.Province
+	admin.ProvinceCode = req.ProvinceCode
+	admin.City = req.City
+	admin.CityCode = req.CityCode
+	admin.TelAreaCode = req.TelAreaCode
+	admin.IsLdap = req.IsLdap
+	admin.BusinessCode = req.BusinessCode
+	if isAdd {
+		err = system.AddAdmin(admin)
+		if err != nil {
+			err = fmt.Errorf("新增失败,Err:%s", err.Error())
+			return
+		}
+	} else {
+		err = admin.Update([]string{})
+		if err != nil {
+			err = fmt.Errorf("更新失败,Err:%s", err.Error())
+			return
+		}
+	}
+
+	return
+}

+ 12 - 0
utils/common.go

@@ -105,6 +105,18 @@ func GetTodayLastSecond() time.Duration {
 	return time.Duration(end.Unix()-time.Now().Local().Unix()) * time.Second
 }
 
+// 校验邮箱格式
+func ValidateEmailFormatat(email string) bool {
+	reg := regexp.MustCompile(RegularEmail)
+	return reg.MatchString(email)
+}
+
+// 验证是否是手机号
+func ValidateMobileFormatat(mobileNum string) bool {
+	reg := regexp.MustCompile(RegularMobile)
+	return reg.MatchString(mobileNum)
+}
+
 // 处理出生日期函数
 func GetBrithDate(idcard string) string {
 	l := len(idcard)

+ 6 - 0
utils/constants.go

@@ -243,3 +243,9 @@ const (
 	CACHE_CRM_AUTH_CODE_PREFIX   = "eta_forum:crm_auth_code:"   // 免密登录Code-CRM
 	CACHE_FORUM_AUTH_CODE_PREFIX = "eta_forum:forum_auth_code:" // 免密登录Code-ETA
 )
+
+// 手机号,电子邮箱正则
+const (
+	RegularMobile = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0-9])|(17[0-9])|(16[0-9])|(19[0-9]))\\d{8}$" //手机号码
+	RegularEmail  = `\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*`                                             //匹配电子邮箱
+)