作者 唐旭辉

成员管理 完成

package command
type EditUserPermissionCommand struct {
Id int64 `json:"id"`
CompanyId int64 `json:"-"`
PermissionType []int64 `json:"permissionType"` //权限数据
CheckedPartner []int64 `json:"checkedPartner"` //可查看合伙人列表合伙人
}
... ...
... ... @@ -6,5 +6,6 @@ type UserListQuery struct {
// 查询偏离量
Offset int `json:"offset" `
// 查询限制
Limit int `json:"limit"`
Limit int `json:"limit"`
CompanyId int64 `json:"companyId"`
}
... ...
... ... @@ -249,6 +249,7 @@ func (service UsersService) GetUserList(queryOption query.UserListQuery) (int, [
UserNameMatch: queryOption.UserNameMatch,
Offset: queryOption.Offset,
Limit: queryOption.Limit,
CompanyId: queryOption.CompanyId,
})
var permissionQuery domain.PermissionFindOption
permissionList, err = permissionRepository.Find(permissionQuery)
... ... @@ -295,3 +296,189 @@ func (service UsersService) buildGetUserList(usersData []domain.Users, permissio
}
return result
}
func (service UsersService) GetUserData(userId int64, companyId int64) (map[string]interface{}, error) {
var (
transactionContext, _ = factory.CreateTransactionContext(nil)
err error
)
if err = transactionContext.StartTransaction(); err != nil {
return nil, lib.ThrowError(lib.TRANSACTION_ERROR, err.Error())
}
defer func() {
transactionContext.RollbackTransaction()
}()
var (
userRespository domain.UsersRepository
perterRespository domain.PartnerInfoRepository
usersData domain.Users
pertnerList []domain.PartnerInfo
)
if userRespository, err = factory.CreateUsersRepository(map[string]interface{}{
"transactionContext": transactionContext,
}); err != nil {
return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
}
if perterRespository, err = factory.CreatePartnerInfoRepository(map[string]interface{}{
"transactionContext": transactionContext,
}); err != nil {
return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
}
usersData, err = userRespository.FindOne(domain.UsersFindOneQuery{
Id: userId, CompanyId: companyId,
})
if err != nil {
e := fmt.Sprintf("获取用户(id=%d)数据失败;%s", userId, err)
return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, e)
}
var partnerIds []int64
for _, v := range usersData.AccessPartners {
partnerIds = append(partnerIds, v.Id)
}
if len(partnerIds) > 0 {
pertnerList, err = perterRespository.Find(domain.PartnerFindQuery{
Ids: partnerIds,
})
if err != nil {
e := fmt.Sprintf("获取合伙人数据失败:%s", err)
return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, e)
}
}
transactionContext.CommitTransaction()
result := service.buildGetUserData(&usersData, pertnerList)
return result, nil
}
//buildGetUserData 构建前端需要的数据
func (service UsersService) buildGetUserData(userData *domain.Users, partnerList []domain.PartnerInfo) map[string]interface{} {
result := map[string]interface{}{
"id": userData.Id,
"permissionType": []int64{},
"name": userData.Name,
"account": userData.Phone,
"isAdmin": 0,
"status": 0,
"checkedPartner": []map[string]interface{}{},
}
if userData.IsSuperAdmin() {
result["isAdmin"] = 1
}
if userData.IsUsable() {
result["status"] = 1
}
permissionIds := make([]int64, len(userData.Permission))
for _, v := range userData.Permission {
permissionIds = append(permissionIds, v.Id)
}
result["permissionType"] = permissionIds
checkedPartner := make([]map[string]interface{}, len(partnerList))
for i := range partnerList {
m := map[string]interface{}{
"id": partnerList[i].Partner.Id,
"name": partnerList[i].Partner.PartnerName,
}
checkedPartner = append(checkedPartner, m)
}
result["checkedPartner"] = checkedPartner
return result
}
//EditUserPermission 编辑用户的权限
func (service UsersService) EditUserPermission(cmd command.EditUserPermissionCommand) error {
var (
transactionContext, _ = factory.CreateTransactionContext(nil)
err error
)
if err = transactionContext.StartTransaction(); err != nil {
return lib.ThrowError(lib.TRANSACTION_ERROR, err.Error())
}
defer func() {
transactionContext.RollbackTransaction()
}()
var (
userRespository domain.UsersRepository
usersData domain.Users
permissionRepository domain.AdminPermissionRepository
permissionList []domain.AdminPermission
partnerRespository domain.PartnerInfoRepository
partnerList []domain.PartnerInfo
)
if userRespository, err = factory.CreateUsersRepository(map[string]interface{}{
"transactionContext": transactionContext,
}); err != nil {
return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
}
usersData, err = userRespository.FindOne(domain.UsersFindOneQuery{
Id: cmd.Id,
})
if err != nil {
e := fmt.Sprintf("获取用户(id=%d)数据失败,%s", cmd.Id, err)
return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, e)
}
if !usersData.InCompany(cmd.CompanyId) {
return lib.ThrowError(lib.BUSINESS_ERROR, "提交的数据异常")
}
if usersData.IsSuperAdmin() {
//超级管理员无需编辑权限
return nil
}
if permissionRepository, err = factory.CreateAdminPermissionRepository(map[string]interface{}{
"transactionContext": transactionContext,
}); err != nil {
return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
}
if len(cmd.PermissionType) > 0 {
permissionList, err = permissionRepository.Find(domain.PermissionFindOption{
Ids: cmd.PermissionType,
})
if err != nil {
e := fmt.Sprintf("获取权限列表数据失败:%s", err)
return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, e)
}
}
if partnerRespository, err = factory.CreatePartnerInfoRepository(map[string]interface{}{
"transactionContext": transactionContext,
}); err != nil {
return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
}
if len(cmd.CheckedPartner) > 0 {
partnerList, err = partnerRespository.Find(domain.PartnerFindQuery{
Ids: cmd.CheckedPartner,
CompanyId: cmd.CompanyId,
})
if err != nil {
e := fmt.Sprintf("获取合伙人列表数据失败:%s", err)
return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, e)
}
}
var (
partners = make([]domain.Partner, len(partnerList))
permissionsBase = make([]domain.AdminPermissionBase, len(permissionList))
)
for i := range partnerList {
p := partnerList[i].Partner
partners = append(partners, p)
}
for i := range permissionList {
if permissionList[i].Code == domain.PERMINSSION_ADMIN_USER {
return lib.ThrowError(lib.BUSINESS_ERROR, "操作异常")
}
p := domain.AdminPermissionBase{
Id: permissionList[i].Id,
Code: permissionList[i].Code,
}
permissionsBase = append(permissionsBase, p)
}
_ = usersData.Update(map[string]interface{}{
"AccessPartners": partners,
"Permission": permissionsBase,
})
err = userRespository.Edit(&usersData)
if err != nil {
e := fmt.Sprintf("更新用户(id=%d)数据失败:%s", usersData.Id, err)
return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, e)
}
err = transactionContext.CommitTransaction()
return nil
}
... ...
... ... @@ -46,6 +46,8 @@ type PartnerInfo struct {
PartnerCategoryInfos []PartnerCategoryInfo `json:"partnerCategoryInfos"`
//合伙类别
PartnerCategory int `json:"partnerCategory"`
//公司id
CompanyId int64 `json:"companyId"`
}
func (p *PartnerInfo) GetPartnerCategory() map[int]string {
... ... @@ -63,6 +65,7 @@ func (p *PartnerInfo) IsUsable() bool {
type PartnerFindOneQuery struct {
UserId int64
AccountEqual string
CompanyId int64
}
type PartnerFindQuery struct {
... ... @@ -71,6 +74,8 @@ type PartnerFindQuery struct {
PartnerCategory []int //合伙人类型
RegionInfo *RegionInfo //区域
PartnerName string //合伙人姓名
CompanyId int64
Ids []int64
}
type PartnerInfoRepository interface {
... ...
... ... @@ -20,7 +20,6 @@ type PartnerInfo struct {
Password string
// 状态(1:启用或者0:禁用)
Status int `pg:",use_zero"`
//所属区域信息
RegionInfo *domain.RegionInfo
//创建时间
... ... @@ -35,6 +34,8 @@ type PartnerInfo struct {
PartnerCategory int `pg:",default:1"` //partner_category
//合伙类别
PartnerCategoryInfos []PartnerCategoryInfo
//公司id
CompanyId int64
}
var _ pg.BeforeUpdateHook = (*PartnerInfo)(nil)
... ...
... ... @@ -30,6 +30,7 @@ func (repository *PartnerInfoRepository) transformPgModelToDomainModel(partnerIn
Salesman: partnerInfoModel.Salesman,
RegionInfo: partnerInfoModel.RegionInfo,
CooperateTime: partnerInfoModel.CooperateTime,
CompanyId: partnerInfoModel.CompanyId,
}
return m, nil
}
... ... @@ -56,6 +57,7 @@ func (repository *PartnerInfoRepository) Save(dm domain.PartnerInfo) (*domain.Pa
Salesman: dm.Salesman,
RegionInfo: dm.RegionInfo,
CooperateTime: dm.CooperateTime,
CompanyId: dm.CompanyId,
}
if m.Id == 0 {
err = tx.Insert(m)
... ... @@ -85,6 +87,9 @@ func (repository *PartnerInfoRepository) FindOne(queryOptions domain.PartnerFind
if queryOptions.UserId > 0 {
query = query.Where("id=?", queryOptions.UserId)
}
if queryOptions.CompanyId > 0 {
query = query.Where("company_id=?", queryOptions.CompanyId)
}
if err := query.First(); err != nil {
return nil, err
}
... ... @@ -105,13 +110,19 @@ func (repository *PartnerInfoRepository) Find(queryOption domain.PartnerFindQuer
if len(queryOption.PartnerCategory) > 0 {
query = query.WhereIn("partner_category in(?)", queryOption.PartnerCategory)
}
if queryOption.CompanyId > 0 {
query = query.Where("company_id=?", queryOption.CompanyId)
}
if len(queryOption.Ids) > 0 {
query = query.WhereIn("id in(?)", queryOption.Ids)
}
if queryOption.Offset > -1 {
query = query.Offset(queryOption.Offset)
}
if queryOption.Limit > 0 {
query = query.Limit(queryOption.Limit)
} else {
query = query.Limit(20)
query = query.Limit(1000)
}
var (
err error
... ... @@ -145,6 +156,9 @@ func (repository PartnerInfoRepository) CountAll(queryOption domain.PartnerFindQ
if len(queryOption.PartnerCategory) > 0 {
query = query.WhereIn("partner_category in(?)", queryOption.PartnerCategory)
}
if queryOption.CompanyId > 0 {
query = query.Where("company_id=?", queryOption.CompanyId)
}
cnt, err := query.Count()
return cnt, err
}
... ...
... ... @@ -4,6 +4,9 @@ import (
"errors"
"github.com/astaxie/beego/logs"
adminPermissionquery "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/adminPermission/query"
adminPermissionService "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/adminPermission/service"
userCommand "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/users/command"
userQuery "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/users/query"
userService "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/users/service"
"gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain"
... ... @@ -25,7 +28,7 @@ func (c *UserController) Prepare() {
}
//ListUser 获取用户分页列表
func (c *AdminUserController) ListUser() {
func (c *UserController) ListUser() {
//用与适配前端定义的数据结构
type Paramter struct {
SearchText string `json:"searchText"`
... ... @@ -52,6 +55,7 @@ func (c *AdminUserController) ListUser() {
UserNameMatch: param.SearchText,
Limit: param.PageSize,
Offset: param.PageSize * (param.PageNumber - 1),
CompanyId: c.GetUserCompany(),
}
cnt, usersData, err := newUserService.GetUserList(queryOption)
if err != nil {
... ... @@ -61,3 +65,97 @@ func (c *AdminUserController) ListUser() {
c.ResponsePageList(usersData, cnt, param.PageNumber)
return
}
//BeforeEditUser 编辑用户数据的前置接口
func (c *UserController) BeforeEditUser() {
newPermissionSrv := adminPermissionService.NewAdminPermissionService(nil)
allPermission, err := newPermissionSrv.ListAdminPermission(adminPermissionquery.ListAdminPermissionQuery{
ParentId: 0,
NotCode: []string{domain.PERMINSSION_ADMIN_USER},
})
if err != nil {
logs.Error("获取权限数据失败:%s", err)
c.ResponseError(errors.New("服务异常"))
return
}
var rspData []map[string]interface{}
for i := range allPermission {
if allPermission[i].Code == domain.PERMINSSION_ADMIN_USER {
continue
}
m := map[string]interface{}{
"id": allPermission[i].Id,
"permissionName": allPermission[i].Name,
}
rspData = append(rspData, m)
}
c.ResponseData(rspData)
return
}
//GetUserData 用户详情页数据
func (c *UserController) GetUserData() {
//用与适配前端定义的数据结构
type Paramter struct {
Id int64 `json:"id"`
}
var (
param Paramter
err error
)
if err = c.BindJsonData(&param); err != nil {
logs.Error(err)
c.ResponseError(errors.New("json数据解析失败"))
return
}
companyId := c.GetUserCompany()
newUserService := userService.NewUsersService(nil)
usersData, err := newUserService.GetUserData(param.Id, companyId)
if err != nil {
c.ResponseError(err)
return
}
c.ResponseData(usersData)
return
}
//EditUserPermission 编辑用户的权限数据
func (c *UserController) EditUserPermission() {
type PartnerList struct {
Id int64 `json:"id"`
}
type UserDetailParam struct {
Id int64 `json:"id"`
PermissionType []int64 `json:"permissionType"`
CheckedPartner []PartnerList `json:"checkedPartner"` //合伙人
}
var (
param UserDetailParam
err error
)
if err = c.BindJsonData(&param); err != nil {
logs.Error(err)
c.ResponseError(errors.New("json数据解析失败"))
return
}
companyId := c.GetUserCompany()
newUserService := userService.NewUsersService(nil)
var (
partnerIds = make([]int64, len(param.CheckedPartner))
)
for _, v := range param.CheckedPartner {
partnerIds = append(partnerIds, v.Id)
}
err = newUserService.EditUserPermission(userCommand.EditUserPermissionCommand{
Id: param.Id,
CompanyId: companyId,
PermissionType: param.PermissionType,
CheckedPartner: partnerIds,
})
if err != nil {
c.ResponseError(err)
return
}
c.ResponseData(nil)
return
}
... ...
... ... @@ -14,11 +14,11 @@ func init() {
// beego.NSRouter("/pwd-update", &controllers.AdminLoginController{}, "POST:PwdUpdate"),
),
beego.NSNamespace("/admin",
beego.NSRouter("/update", &controllers.AdminUserController{}, "POST:SaveAdminUser"),
beego.NSRouter("/detail", &controllers.AdminUserController{}, "POST:GetAdminUser"),
beego.NSRouter("/list", &controllers.AdminUserController{}, "POST:ListAdminUser"),
beego.NSRouter("/forbidden", &controllers.AdminUserController{}, "POST:ForbiddenAdminUser"),
beego.NSRouter("/permission", &controllers.AdminUserController{}, "POST:BeforeEditAdminUser"),
beego.NSRouter("/update", &controllers.UserController{}, "POST:EditUserPermission"),
beego.NSRouter("/detail", &controllers.UserController{}, "POST:GetUserData"),
beego.NSRouter("/list", &controllers.UserController{}, "POST:ListUser"),
// beego.NSRouter("/forbidden", &controllers.UserController{}, "POST:ForbiddenAdminUser"),
beego.NSRouter("/permission", &controllers.UserController{}, "POST:BeforeEditUser"),
),
beego.NSNamespace("/partners",
beego.NSRouter("/list", &controllers.PartnerInfoController{}, "POST:ListPartnerInfo"),
... ...
... ... @@ -6,7 +6,6 @@ import (
)
//外部调用,企业平台,总后台调用
func init() {
nsPlatform := beego.NewNamespace("/platform",
beego.NSRouter("/action", &controllers.SyncDataController{}, "post:SyncData"),
... ... @@ -14,7 +13,7 @@ func init() {
)
nsUcenter := beego.NewNamespace("/ucenter",
beego.NSRouter("/company/allow_forbid", &controllers.SyncDataController{}, "post:AllowForidCompany"),
beego.NSRouter("/company/info", &controllers.SyncDataController{}, "post:GetCompanyInfo"),
//beego.NSRouter("/company/info", &controllers.SyncDataController{}, "post:GetCompanyInfo"),
)
beego.AddNamespace(nsPlatform) //企业平台调用
... ...